frame:python + pytest + requests + re

1. interface request mode:get、post、delete、put

Request mode get paramsurl、params
request mode post paramsurl、data、json

Request parameter type:键值对、json格式、文件格式


2. Test case management framework:unittest、pytest

First, install the Pytest and Requests packages**pip install pytest;pip install requests.**
pytest默认规则:1、py文件必须以“test_”开头或者以“_test”结尾;2、类名必须以“Test”开头;3、测试用例必须以“test_”开头
image.png


3. Request parameter transmission mode

Point 1. Get request:通过params传参,如下:

image.png

Point 2. Post request:通过JSON和DATA传参,如下:

image.png

注:在post请求中,JSON传参和data传参的区别?
  • Data传参方式:当接口的数据报文为dict字典类型:那么默认情况下请求头:application/x-www-from-urlencoded,表示以from表单的方式传参,格式:a = 1 & b = 2 & c = 3当接口的数据报文为str字符串类型:那么默认情况下请求头:text/plain(如果dict字典格式转换成str字符串格式传参)

  • Json传参方式:此种格式传参的时候,接口的数据报文不论时dict字典格式还是str字符串格式,请求头都默认为application/json,格式:{“a”:1, “b”:2}

  • 传参报文的格式转化:即序列化和反序列化的变化:序列化:json.dumps(data) 把字典格式转化成str格式;反序列化:json.loads(data) 把字符串格式转化成dict格式

Point 3. 总结如下:

  1. data传参只能传简单的只有键值对的dict格式{“a”:1, “b”:2}或者时str字符串格式;
  2. json传参只能穿dict字典格式,复杂的dict字典格式也能传参,如嵌套的字典{“ddd”:{“a”:”b”}}
  3. cookie鉴权:网页的接口基本上都要做
    1. 第一种方式,在登录接口设置cookie鉴权,如:TestQueryWeather.cookies = rep.cookie,其格式(类名.cookie变量名 = 返回结果.cookie)
    2. 第二种方式,通过session实现cookie鉴权,这种常用

4. requests 自动化框架封装

Point 1. 统一接口请求方式:

核心的接口请求方式requests.request(“get/post”, url=url, data=data)
image.png


Point 2. pytest.ini

在根目录创建pytest.ini文件,到文件中添加配置,具体详情如下:
[pytest]
addopts = -vs: 配置运行方式
testpaths = ./testcase : 配置测试用例
python_file = test_*.py : 配置文件名
python_classes = Test*:# 配置类名前缀
python_functions = test_*: 配置方法前缀
markers = :对用例进行分组,在用例里面需要再冒烟用例进行标记
smoke:maoyan


Point 3. pytest plugins

  1. 首先在根目录下创建一个txt文件:requirements.txt
  2. 把所有的插件名称放到这个txt文件中(在此文件的第一行需要加上 pytest)
    1. pytest-html
    2. pytest-xdist
    3. pytest-ordering
    4. pytest-rerunfailures
    5. allure-pytest

image.png

  1. 然后再pycharm的终端输入:pip install -r requirements.txt

Point 4. 运行方式

  1. 主函数:使用main方式运行
  2. 命令行:在终端使用命令“pytest.main()”

Point 5. 前后置、夹具

  1. setup/teardown在每个用例之前或者之后执行一次

image.png

  1. setup_class/teardown_class在每个类之前或者之后执行一次
  2. 部分前置:

@pytest.fixture(scope="作用域", params="数据驱动", autouse="自动执行", ids="自定义参数名", name="重命名")

作用域::function、class、module、package/session

image.png

3.1 @pytest.fixture()一般情况下会和conftest.py文件一起使用

  • conftest.py文件名是固定的
  • conftest.py文件是单独存放@pytest.fixture()的方法的文件,用处是多个py文件之间可以共享
  • conftest.py文件里面的方法不需要导入,可以直接调用
  • conftest.py文件可以有多个,也可以有多个不同层级

image.png


Point 6. Yaml files:参数关联