Pytest

- 文件名需要以
test_开头或以_test结尾,同时文件内部的方法名也需要以test_开头,这样pytest才会把它当作测试用例文件和测试用例中的测试方法,当我们运行该测试用例文件时,会执行该文件内的所有测试方法 - 如果在控制台直接输入
pytest <文件名>,那么文件不以test_开头或以_test结尾,也能成功执行 - 但是如果
pytest <文件夹名>,那么pytest只会运行该文件夹下以test_开头或以_test结尾的文件 - 一般使用
test_开头 - 如果测试用例内部的方法没有用
test_开头,那么pytest不会运行这个方法 - 测试类必须以
Test开头,且不能有init方法,当我们点击左侧的小三角时,会运行该类下的所有测试方法
- 在pytest中,判断期望值是否跟实际值相等,是使用 assert来实现的- 使用pytest来运行测试用例时,需要在控制台中,输入pytest <文件名> - 运行测试用例后,在控制台会显示运行结果
.F表示第一个通过,第二个没通过E表示error的代码位置- 右侧的
100%表示测试用例的所有方法均执行完成

Pytest中的测试用例执行顺序
默认执行顺序
- 按照定义的先后,自上而下执行
- 如果是在同一文件夹下的测试用例文件,那么会按照文件名的顺序,自上而下执行
使用 pytest-ordering 自定义顺序(需要安装pytest-ordering包)

在方法前加上run注解,其中
order=几,就是第几位执行
常见的断言类型
- 等于:
== - 不等于:
!= - 大于:
> - 小于:
< - 属于:
in - 不属于:
not in - 大于等于:
>= - 小于等于:
<= - 是:
is - 不是:
is not

使用pytest来做request测试
- 这里的
test_mobile()和test_mobile_post()是两个近似的测试方法,区别在于一个是get,一个是post - 注意:
- 在Json中,我们可以使用[key]来获取value,例如
result['msg'] == "ok"
- 在Json中,我们可以使用[key]来获取value,例如
import requests
def test_mobile():
params = {
"shouji": "13906191369",
"appkey": "123"
}
r = requests.get(url="http://sellshop.5istudy.online/sell/shouji/query", params=params)
print(r.status_code)
assert r.status_code == 200
result = r.json()
assert result['status'] == 0
assert result['msg'] == "ok"
assert result['result']["shouji"] == "13906191369"
assert result['result']["province"] == "浙江"
assert result['result']["city"] == "杭州"
assert result['result']["company"] == "中国移动"
assert result['result']["areacode"] == "0571"
# print(r.json())
def test_mobile_post():
params = {
"shouji": "13906191369",
"appkey": "123"
}
r = requests.post(url="http://sellshop.5istudy.online/sell/shouji/query", params=params)
assert r.status_code == 200
result = r.json()
assert result['status'] == 0
assert result['msg'] == "ok"
assert result['result']["shouji"] == "13906191369"
assert result['result']["province"] == "浙江"
assert result['result']["city"] == "杭州"
assert result['result']["company"] == "中国移动"
assert result['result']["areacode"] == "0571"
- 运行后的结果为:

pytest指定目录/文件执行
pytest testcases指定目录执行,则会依次执行该目录下所有符合条件的测试用例pytest testcases/test_one.py指定文件执行,则会依次执行该文件内的所有符合条件的测试方法pytest什么都不加,那么就会从当前的工作环境下,依次执行所有符合条件的测试用例(包括文件夹内)
pytest.ini配置文件
- 可以使用
testpaths来指定默认执行的路径或文件 - 这样就可以在控制台直接输入
pytest,默认执行的就是testpaths的路径,等同于pytest testcases ./表示和pytest.ini处在同一级目录下

pytest常用运行参数
pytest -m:执行特定的测试用例pytest -k:执行用例包含“关键字”的用例pytest -q:简化控制台的输出pytest -v:可以输出用例更加详细的执行信息pytest -s:输出我们用例中的调试信息