pytest介绍
pytest是python的第三方的单元测试框架。python自带的单元测试框架 unittest。
https://docs.pytest.org/en/6.2.x/
安装pytest
pip install pytest
基本使用
修改上次接口代码
page/useraction.py 文件中修改user_register方法,添加 return返回值。
class UserAction:def user_register(self):"""注册用户:return:"""url = BaseConfig.BASEURL+"api/v1/user/register"body_data = {"loginName": BaseConfig.PHONE, # 通过调用函数 生成手机号码"password": "123456"}print(f'现在进行注册:用户名{BaseConfig.PHONE},密码为123456')# 发送 json 格式 post请求r = requests.post(url, json=body_data)# 状态码# print(r.status_code)# print(r.json())# 将结果返回出去return r
编写测试用例。
新建 testcases python包。所有的测试用例都放在 testcases 下
testcases/test_demo.py 编写测试注册的测试用例
"""编写pytest相关的测试用例pytest单元测试用例 函数名必须以 test_ 开头"""from page.useraction import UserActiondef test_user_register():"""测试注册接口:return:"""user = UserAction()# 拿到服务器返回的结果r = user.user_register()# 添加断言 预期结果# 状态码为200assert r.status_code == 200# 期望注册成功# 对服务器返回结果进行断言print(r.json())assert r.json()["resultCode"] == 200assert r.json()["message"] == "success"
在自动化测试用例中,每个用例都要添加对应的断言。断言相当于我们在手工测试过程中预期结果和实际结果的对比。
pytest的运行
在命令行模式下,执行
pytest testcases\test_demo.py -s -v

注意在执行的时候 需要使用到相对路径。
- -s 代码中有print() 的时候可以打印出来
- -v 显示详细执行情况。
比如上面的代码中断言部分没有通过,就会报错。
pytest 会把具体的错误信息显示出来。
如果用例都通过。会显示执行的函数名
完善测试用例
修改文件
page/useraction.py
"""用户相关的操作"""from config.baseconfig import BaseConfigimport requestsimport hashlibclass UserAction:def user_register(self):"""注册用户:return:"""url = BaseConfig.BASEURL+"api/v1/user/register"body_data = {"loginName": BaseConfig.PHONE, # 通过调用函数 生成手机号码"password": "123456"}# print(f'现在进行注册:用户名{BaseConfig.PHONE},密码为123456')# 发送 json 格式 post请求r = requests.post(url, json=body_data)# 状态码# print(r.status_code)# print(r.json())# 将结果返回出去return rdef user_login(self):"""用户登录:return:"""passwd = hashlib.md5('123456'.encode()).hexdigest()url = f"{BaseConfig.BASEURL}api/v1/user/login"body_data = {"loginName": BaseConfig.PHONE,"passwordMd5": passwd # 使用md5 加密之后的密文进行登录}# print(f'现在进行登录: 用户名为 {BaseConfig.PHONE},加密之后的密码 {passwd}')r = requests.post(url, json=body_data)# print(r.status_code)# print(r.json())# print("登录成功的token值:", r.json()["data"])# 将登录成功的token 值更新到类变量中BaseConfig.TOKEN = r.json()['data']return rdef user_search(self):"""搜索商品:return:"""url = "http://49.233.108.117:28019/api/v1/search"qury_data = {"keyword": "iphone"}header = {# 使用类变量 获取最新的token值"token": BaseConfig.TOKEN}print(f'现在搜索商品,使用信息头: {header}')r = requests.get(url, params=qury_data, headers=header)print('搜索结果', r.json())return r
编写测试用例
testcases/test_demo.py
"""编写pytest相关的测试用例pytest单元测试用例 函数名必须以 test_ 开头"""from page.useraction import UserActionuser = UserAction()def test_user_register():"""测试注册接口:return:"""# 拿到服务器返回的结果r = user.user_register()# 添加断言 预期结果# 状态码为200assert r.status_code == 200# 期望注册成功# 对服务器返回结果进行断言print(r.json())assert r.json()["resultCode"] == 200assert r.json()["message"] == "SUCCESS"def test_login():r = user.user_login()assert r.status_code == 200assert r.json()["resultCode"] == 200assert r.json()["message"] == "SUCCESS"
运行
pytest testcases\test_demo.py -s -v

- -s 显示代码中 print() 语句
- -v 显示详细的日志级别。可以显示执行了哪个py文件中的那个测试用例。
