pytest测试框架 执行方式
以函数的方式简单执行
先了解一下Pytest的执行的方式
test_pytest.py
import pytest
def test_001():
print("test_01")
def test_002():
print("test_02")
if __name__ == '__main__':
#main方法第一个参数-v打印详细信息, 第二个执行的模块名称
pytest.main(['-v',"test_pytest.py"])
看一下输出结果 上面划红线的是执行了多少个测试用例 中间的是执行的测试模块 下面的是有几个是通过的以及时间
函数或方法名的命名规范
函数名或类的方法名须以test为开头否则无法执行 现在演示一下
import pytest
def test_001():
print("test_01")
def test_002():
print("test_02")
def add_test():
print("add_test")
if __name__ == '__main__':
pytest.main(['-v',"test_pytest.py"])
看一下到底能否运行
可以看到还是两个方法 add_test并没有运行
DOS命令执行
切换到当前项目的路径下 输入pytest -v test_pytest.py 执行
断言方法
pytest 断言使用python的原生断言方法 assert
assert几种断言方法
1、 == 内容和类型必须同时满足相等
2 、in 实际结果包含预期结果
3、 is 断言前后两个值 相等
assert ==断言
断言 x + y相加后 实际结果是否等于预期结果
def add(x,y):
return x + x
def test_add():
assert add(1,1) == 2
执行后 在控制台上的显示
如果把预期结果故意改错 看看 控制台会显示什么
这个错误 很明显了
assert in 包含断言
断言str1字符串中是否包含GO
str1 = "python GO PHP JAVA "
def test_in():
assert "GO" in str1
assert is 断言前后的值相等
判断两个字符串是否相等
str1 = "admin"
str2 ="admin"
def test_is():
assert str2 is str1
用== 也是一样的
str1 = "admin"
str2 ="admin"
def test_is():
assert str2 == str1
pytest 常用命令详解
1、-v输出详细的信息
2、-s 输出测试函数或测试方法print内容
3、-k 按分类执行测试点
4、-m 进行分组执行
5、-x 执行失败立刻停止
6、–maxfail执行失败的最大次数
7、–tb=line 错误信息在一行展示
pytest -v输出详细的信息
这个命令前面已经展示后很多次了 所以这里把-v去掉看看执行后 会显示什么 做个对比
上面的是去掉-v后 下面是加上-v 参数执行 有-v的可以显示具体那个函数方法执行成功或失败
pytest -s输出测试函数或测试方法print内容
输入print语句内容 比如说要打印查看一下 用户的id
def test_id():
userid =1234
print(userid)
pytest -k 按分类执行测试点
如果有十个测试用例 现在有需求只需要执行5个用例 那么可以用装饰器给用例分成两个分类 分别执行
@python.mark 是固定写法 后面的是自己起的名字 现在分了两个类 run和stop
import pytest
@pytest.mark.run
def test_001():
print("test_01")
@pytest.mark.run
def test_002():
print("test_02")
@pytest.mark.run
def test_03():
print("add_test")
def add(x,y):
return x + x
@pytest.mark.stop
def test_add():
assert add(1,1) == 2
@pytest.mark.stop
def test_id():
userid =1234
print(userid)
现在只执行run分类的方法或函数
pytest -v -k “run” test_pytest.py 执行
执行多个测试分类
-m 进行分组执行
-m 和-k 执行起来 区别就是 分类不需要带引号 其他都差不多
-x 执行失败立刻停止
不加-x 与加上-x的前后对比 没有-x 执行失败后 后面的会继续执行 带上-x后 执行失败后 后面的不会继续执行
–maxfail执行失败的最大次数
如果设定最大失败的次数是2 那么如果两个用例执行失败 后面的会停止执行 如果是2次以下会继续执行
–tb=line 错误信息在一行展示
没有这个命令的话 如果有大量的用例执行错误 那么 查看报错信息就很费劲了
pytest API测试实战
以登录接口为例
import pytest
import requests
def test_login():
r = requests.post(
url="http://127.0.0.1:5000/login/",
data={
"phone":1232432241,
"password":123456
},
headers =
{
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
}
)
print(r.text)
assert r.json()['data']['id'] == 28239 and r.json()['msg'] == "登录成功"
if __name__ == '__main__':
pytest.main(["-v","test_pytest.py"])