Pytest项目_day07(pytest)

发布于:2025-08-08 ⋅ 阅读:(137) ⋅ 点赞:(0)

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"
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:输出我们用例中的调试信息