安享智慧理财项目 测试12

代码实现自动化相关理论

面试题问你如何做代码接口自动化

代码编写自动化脚本的流程

2.1抽取功能转化为自动化用例

2.2搭建环境(测试工具)

1、python、pycharm、requeste、pymysql、parametrize

2、jenkins、jdk

提示由于写的自动化脚本、而自动化脚本编写之前功能已测试完毕,所以不需要在单独搭建项目环境

2.3搭建目录结构

2.4代码编写

# 1、获取图片验证码接口 封装
def api_img_code(self, random):
    # 调用get方法 返回响应对象
    return self.__session.get(url=self.__url_img_code.format(random))

# 2、获取短信验证码接口 封装
def api_phone_code(self, phone, imgVerifyCode):
    # 1、定义请求参数
    data = {
        "phone": phone,
        "imgVerifyCode": imgVerifyCode,
        "type": "reg"
    }
    # 2、调用请求方法
    return self.session.post(url=self.__url_phone_code, data=data)

# 3、注册接口 封装
def api_register(self, phone, password, verifycode, phone_code, ):
    data = {
        "phone": phone,
        "password": password,
        "verifycode": verifycode,
        "phone_code": phone_code,
        "dy_server": "no",
        "invite_phone": ""
    }
    # 2、调用请求方法
    return self.session.post(url=self.__url_register, data=data)

# 4、登录接口 封装
def api_login(self, keywords, passwrod):
    # 1、定义请求参数
    data = {
        "keywords": keywords,
        "passwrod": passwrod
    }
    # 2、调用请求方法
    return self.session.post(url=self.__url_login, data=data)

# 5、查询登录状态接口 封装
def api_login_status(self):
    return self.session.post(url=self.__url_login_status)

script(test01_register_login.py)

import unittest

import requests

from api.api_reqister_login import ApiRegisterLogin


class   TestReginsterLogin(unittest.TestCase):
    # 初始化
    def setUp(self) -> None:
        #获取session对象
        self.session = requests.session()
        #获取ApiRegisterLogin实例
        self.reg = ApiRegisterLogin(self.session)

    # 结束
    def tearDown(self) -> None:
        #关闭session对象
        self.session.close()

    #1、获取图片验证码接口 测试
    def test01_img_code(self):
        pass

    #2、获取短信验证码接口 测试
    def test02_phone_code(self):
        pass

    #3、注册接口 测试
    def test03_register(self):
        pass

    #4、登录接口 测试
    def test04_login(self):
        pass

    #5、查询登录状态接口 测试
    def test04_login_status(self):
        pass

2.5断言

说明:判断程序执行实际结果是否符合预期结果

示例:

try:
    #调用登录接口
    self.reg.api_login(keywords="13600001111",passwrod="test123")
    #调用查询登录状态接口
    r = self.reg.api_login_status()
    #看结果
    self.assertIn(expect_text, r.text)
except Exception as e:
    # 1、日志
    print(e)
    # 2、抛异常
    raise

提示:捕获异常的目的是为了将错误的信息记录下来,捕获信息完成后,必须抛出异常。

2.6参数化

步骤

        1、编写数据储存文件 json

        2、编写读取工具方法 read_json()

        3、使用参数化组件进行引用 parametrize

1、编写参数化文件

心得:

1、根据模块来新建json文件(1个模块1个json文件)

2、最外侧使用{},模块下几个接口,编写几个key,值为列表

3、列表值中,有几组数据,就写几个{}

4、每组数据{}中,组成格式为:说明+参数+预期结果

示例:

{
  "img_code": [
    {
      "desc": "获取图片验证码成功(随机小数)",
      "random": "0.123",
      "expect_code": 200
    },
    {
      "desc": "获取图片验证码成功(随机整数)",
      "random": "123",
      "expect_code": 200
    },
    {
      "desc": "获取图片验证码成功(随机数为空)",
      "random": "",
      "expect_code": 404
    },
    {
      "desc": "获取图片验证码成功(随机数为字符串)",
      "random": "123hello",
      "expect_code": 400
    }
  ],
  "phone_code": [
    {
      "desc": "获取短信验证码成功",
      "phone": "13600001111",
      "imgVerifyCode": 8888,
      "expect_text": "发送成功"
    },
    {
      "desc": "获取短信验证码成功",
      "phone": "13600001111",
      "imgVerifyCode": 8889,
      "expect_text": "验证码错误"
    }
  ],
  "register": [
    {
      "desc": "注册成功(必填参数)",
      "phone": 13600001111,
      "password": "test123",
      "verifycode": 8888,
      "phone_code": 666666,
      "dy_server": "no",
      "expect_text": "注册成功"
    },
    {
      "desc": "注册失败(图片验证码错误)",
      "phone": 13600001112,
      "password": "test123",
      "verifycode": 8889,
      "phone_code": 666666,
      "dy_server": "no",
      "expect_text": "验证码错误"
    },
    {
      "desc": "注册失败(短信验证码错误)",
      "phone": 13600001112,
      "password": "test123",
      "verifycode": 8888,
      "phone_code": 666667,
      "dy_server": "no",
      "expect_text": "验证码错误"
    },
    {
      "desc": "注册失敗(手机号已存在)",
      "phone": 13600001111,
      "password": "test123",
      "verifycode": 8888,
      "phone_code": 666666,
      "dy_server": "no",
      "expect_text": "注册成功"
    }
  ],
  "login": [{
    "desc": "登录成功",
    "keywords": 13600001111,
    "password": "test123",
    "expect_text": "登录成功"
  },
  {
    "desc": "登录失败(密码为空)",
    "keywords": 13600001111,
    "password": "",
    "expect_text": "不能为空"
  },
  {
    "desc": "登录失败(解锁)",
    "keywords": 13600001111,
    "password": "test123",
    "expect_text": "登录成功"
  }],
  "login_status": [
    {
      "desc": "查询登录状态(已登录)",
      "status": "已登录",
      "expect_text": "OK"
    },
        {
      "desc": "查询登录状态(已登录)",
      "status": "未登录",
      "expect_text": "未登"
    }
  ]
}

2、编写读取数据工具

def read_json(filename,key):
    #拼接读取文件的完整路径 os.sep动态获取/
    file_path = DIR_PATH + os.sep + "data" + os.sep +filename
    arr=[]
    with open(file_path,"r",encoding="utf-8")as f:
       for data in json.load(f).get(key):
           arr.append(tuple(data.values())[1:])
    return arr

3、参数化引用

难点1:错误次数锁定

#如果 password == "error123":

        i = 1

        while i <= 3

        #调用登录

        r = self.xxxxlogin()

        #改变计数器

        i+=1

        #断言锁定

        #暂停60秒

        #调用登录(注意:登录时必须给正确密码)

else:

       # 调用登录(参数数据)

       # 断言

难点2:查询登录状态,不同结果

#如果status == "已登录":

        #调用登录

#调用查询登录状态接口

#断言

目标

代码实现

1、抽取功能用例转化为自动化用例

2、搭建环境(测试工具)

3、搭建目录结构

4、编写脚本

5、持续集成

难点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值