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,例如
c
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.ini中定义标签
- 然后需要在特定用例上打标签
- 当我们需要给很多的测试用例打同一个标签时,可以将他们放在一个测试类中,然后给这个测试类打上标签
- 首先需要在pytest.ini中定义标签
-
pytest -k
:执行方法名中包含"关键字"的测试文件或测试用例,如果文件名包含关键字,则会执行该文件下的所有测试用例,否则会查找文件内部包含关键字的测试用例pytest -k '关键字'
-
pytest -q
:简化控制台的输出(只有总的通过和失败情况) -
pytest -v
:可以输出用例更加详细的执行信息(包括版本号、文件目录,具体测试用例的通过和失败情况) -
pytest -s
:输出我们用例中的调试信息(会打印print信息) -
在pytest.ini中配置addopts,可以自动加上运行参数