Pytest基础使用
前言:Pytest是一款成熟的Python测试框架,完全正向兼容unittest。简洁可以实现参数化,自带测试报告;第三方库注意版本兼容。
pip install pytest==6.0.1
pip install pytest-html==3.1.1
1,Pytest用例执行规则
- 类的名字建议使用Test大头
- 用例函数的名字 必须test开头,区分大小写
import pytest
class Test11():
def test_login11(self):
print(" 正在执行登录用例第一条 ")
def test_login22(self):
print(" 正在执行登录用例第二条 ")
def test_login33(self):
print(" 正在执行登录用例第三条 ")
if __name__ == '__main__':
pytest.main(['-v','-s','test11.py'])
- 整个参数是以列表的形式传入
- -v 参数显示命令执行过程, -s 参数显示打印的信息
- 如不加 -s 参数,则 print() 函数打印的信息不会显示
- ‘test11.py’ 是测试文件名字 *必须写的
针对加减乘除功能测试
class Count:
def __init__(self,a,b):
self.a=int(a)
self.b=int(b)
def add(self):
return self.a + self.b
def sub(self):
return self.a - self.b
def mul(self):
return self.a * self.b
def div(self):
return self.a / self.b
import pytest
class TestAdd():
def test_add1(self):
assert Count(2,3).add() == 5
def test_add2(self):
assert Count(21,31).add() == 52
def test_add3(self):
assert Count(40,70).add() == 110
if __name__ == '__main__':
pytest.main(['-v','-s','jwtest.py'])
2,断言和测试固件
上面代码中使用的 assert 就是断言Pytest是使用断言来判断实际结果和预期结果是否相同;
测试断言
- 判断是否相等
assert x == y assert x != y
- 判断是否真假
assert x 预期结果是True assetrt not x 预期结果是False
- 判断是否包含
assert x in y
测试固件
- 类级别
setup_class() 所有测试用例执行前执行一次 teardown_class() 所有测试用例执行后执行一次
- 函数级别(每条测试用例都会执行)
setup() 用例执行前 teardown() 用例执行后
3,参数化-单个参数化
参数化概念
在接口用例中 单个参数的参数化的作用是主要读出所有的测试用例放到列表中,然后依次取出列表中的用例供函数使用,从而完成每一个用例的执行。
单个参数化语法
@pytest.mark.parametrize(argnames,argvalues)
import pytest
@pytest.mark.parametrize("username",["张三","李四","王五"])
def test_login(username):
print(f"登录用户数据为 {username}")
if __name__ == '__main__':
pytest.main(['-v','-s','test12.py'])
- 函数形参username,必须和参数化写的参数名字一致
- 参数化类似个for循环,依次从参数列表中取出元素赋值个username变量
- 列表数据格式还可以是元组,字典等类型,类型相同(不同也OK,不要自添烦恼)
@pytest.mark.parametrize("case",[(2,3,5),(21,31,52),(40,70,110)])
def test_add1(self,case):
j=Count(case[0],case[1])
assert j.add()==case[2]
@pytest.mark.parametrize("user",[{'name':'zhangsan'},{'password':123456}])
def test_register (user):
Rsgister(user['name'], user['password'])
4,参数化-多个参数化
import pytest
@pytest.mark.parametrize("username",["张三","李四","王五"])
@pytest.mark.parametrize("password",["test1234","test5678","test9876"])
def test_login(username, password):
print(f"登录用户名为 {username},密码{password}")
if __name__ == '__main__':
pytest.main(['-v','-s','test14.py'])
- 多个参数化时类似多层for循环,测试用例数回以相乘的方法增加,比如上面会有 3*3=9条测试结果
5,pytest测试报告
pytest.ini报告配置文件
- 文件名称不能更改
- 路径必须放在项目工程根目录下
- 规则名称不能更改
- 唯一能变的是规则值
总结:pytest基本使用API表格
pytest对象方法pytesttest开头是用例assert 断言@pytest.mark,parameterize() [字符串、元组、字典]
Original: https://blog.csdn.net/weixin_44007111/article/details/124849035
Author: 小杜℃
Title: Pytest基础使用
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/773783/
转载文章受原作者版权保护。转载请注明原作者出处!