pytest

HTTP

HTTP是一个协议(服务器传输超文本到浏览器的传送协议)是基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果等)

http资源

http请求方式

http状态码

Requests模块

pycharm创建项目并进行接口请求

下载requests,直接导包下载或者在终端使用pip install requests

requests官网

https://requests.readthedocs.io/en/latest/

get请求

编写请求代码:

import requests

r = requests.get("https://api.github.com/events")
print(r.status_code) #接口状态返回码
print(r.json()) #接口返回的json
print(r.text) #接口返回的文本

运行结果:

请求中携带参数代码:

import requests

params = {
    "shouji": "13456766448",
    "appkey": "0c818521d38759e1"
}

r = requests.get(url="http://api.binstd.com/shouji/query", params=params)
print(r.status_code)
print(r.json())

运行结果:

post请求

params形式:

import requests

params = {
    "shouji": "13456766448",
    "appkey": "0c818521d38759e1"
}

r = requests.post(url="http://api.binstd.com/shouji/query", params=params)
print(r.status_code)
print(r.json())

运行结果:

json形式:

import requests

json_data = {
    "title": "foo",
    "body": "bar",
    "userId": 1
}

r = requests.post(url="http://jsonplaceholder.typicode.com/posts", json=json_data)
print(r.status_code)
print(r.json())

运行结果:

data形式:

import requests

data = {
    "text":"hello"
}

r = requests.post(url="http://dict.youdao.com/keyword/key",data=data)
print(r.status_code)
print(r.json())

运行结果:

requests加入headers:

Pytest

在终端安装pytest

pip install pytest

初体验

def test_one():
    expect = 1
    actual = 1
    assert expect == actual

def test_two():
    expect = 1
    actual = 2
    assert expect == actual

配置运行方式

运行结果:

断言

常用断言类型

示例代码:

pytest+requests练习

import requests

def test_mobile():
    params = {
        "shouji": "13456755448",
        "appkey": "0c818521d38759e1"
    }

    r = requests.get(url="http://api.binstd.com/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"] == "13456755448"
    assert result['result']["province"] == "浙江"
    assert result['result']["city"] =="杭州"
    assert result['result']["company"] =="中国移动"
    assert result['result']["cardtype"] is None
    assert result['result']['areacode'] == "0571"

运行结果:

一次执行多个测试方法

if __name__ == '__main__':
    pytest.main()

运行结果:

配置项pytest.ini

在目录下新建一个file,命名为pytest.int

[pytest]
testpaths=./test_requests

其中testpaths的路径可以修改成想要检测的文件

然后在终端输入pytest即可得到结果

setup/teardown

模块级

在包含测试方法的.py文件中加入如下代码:

def setup_module():
    print("open开开开")

def teardown_module():
    print("clear清清关")

运行pytest.main():

函数级

在包含测试方法的.py文件中加入如下代码:

def setup_function():
    print("open开开开")

def teardown_function():
    print("clear清清关")

运行pytest.main():

类级和方法级区分模块级和函数级的重要一点是,类级和方法级是在中。在类中的方法括号里要加入self

类级

在包含测试方法的类中加入setup和teardown

class TestSAT:

    def setup_class(self):
        print("open开开开")

    def teardown_class(self):
        print("clear清清关")

运行类TestSAT:

方法级

 在包含测试方法的类中加入setup和teardown

class TestSAT:

    def setup_method(self):
        print("open开开开")

    def teardown_method(self):
        print("clear清清关")

运行类TestSAT:

Fixture

fixture是pytest用于将测试前后进行预备、清理工作的代码处理机制。

fixture相对于setup和teardown来说有以下优势

1.fixure命名更加灵活,局限性比较小
2.conftest.py配置里面可以实现数据共享,不需要import就能自动找到一些配置

Fixture夹具,@pytest.ficture

fixture作用范围:session>module>class>function

在包含测试方法的.py文件中加入下列代码:

@pytest.fixture(scope="function",autouse="True")
def func():
    print("前置")

其中scope可以更换为其他参数,默认是function,autouse默认为false,为false情况下要使用夹具的方法将夹具的方法名写入参数列表,如下图:

结果如图,只有传入夹具方法名的方法才会生效:

为True情况下,默认该文件内所有方法都使用夹具,结果如图:

YAML

yaml语法

新建.yaml文件可以先创建config文件夹然后New一个file,命名为data.yaml

hero:
  name: 伽罗
  word: 太平无忧
  Hp: 440

 

heros_name:
  - 小乔
  - 妲己
  - 貂蝉

heros_name_list:
  - - 法师
    - 小乔
    - 妲己
    - 貂蝉

heros:
  - name: 妲己
    word: 来和妲己玩耍吧
    Hp: 400.8

读取yaml文件

下载第三方包安装

pip install pyyaml

新建一个Python文件夹utils,然后New一个read_data.py文件

import yaml

f = open("../config/data.yaml",encoding="utf8")
data = yaml.safe_load(f)
print(data)
print(data['hero'])
print(data['heros_name'])
print(data['heros'])
print(data['heros_name_list'])

运行结果: 

 参数化

参数化可以组装测试数据,在测试前定义好测试数据,并在测试用例中使用

单参数

单参数单次循环

import pytest

@pytest.mark.parametrize("name",["鲁班七号"])
def test_parametize(name):
    print(name + "智商二百五")

运行结果:

单参数多次循环

import pytest

@pytest.mark.parametrize("name",["鲁班七号","虞姬","伽罗"])
def test_parametize(name):
    print(name + "是射手")

运行结果:

多参数 

import pytest

@pytest.mark.parametrize("name,word",[["鲁班七号","上上下下左左右右"],["虞姬","想和风比比脚力吗"],["伽罗","比利剑更稳的是我本人"]])
def test_parametrize(name,word):
    print(f'{name}:{word}')

内部的中括号也可以使用括号代替,即使用元组

运行结果:

parametrize+yaml

 在data.yaml添加如下信息:

mobile_params:
  - [ 13456755448,0c818521d38759e1 ]

改装read_data.py

import yaml

def get_data():
    f = open("../config/data.yaml",encoding="utf8")
    return yaml.safe_load(f)

 编写测试代码:

import pytest
import requests

from utils.read_data import get_data


@pytest.mark.parametrize("shouji,appkey", get_data()['mobile_params'])
def test_mobile(shouji,appkey):
    r = requests.get(url="http://api.binstd.com/shouji/query",
                     params={"shouji": shouji,"appkey": appkey})
    assert r.status_code == 200
    result = r.json()
    assert result['status'] == 0
    assert result['msg'] == "ok"
    assert result['result']["shouji"] == "13456755448"
    assert result['result']["province"] == "浙江"
    assert result['result']["city"] == "杭州"
    assert result['result']["company"] == "中国移动"
    assert result['result']["cardtype"] is None
    assert result['result']['areacode'] == "0571"

运行结果:

Allure测试报告

配置pytest.ini

安装插件

pip install allure-pytest

在pytest.ini下编写如下代码:

addopts = -vs --alluredir ./report

直接运行一个测试用例,在该测试用例所在文件下生成一个report文件夹,包含内容如下:

 

在终端输入pytest 路径,代码如下,可以在根目录下生成report

pytest testcases/test_parametrize_01.py

 打开报告

首先下载并配置allure环境,可参考以下链接(安装完成后一定要重启pycharm):

!此处推荐使用2.13.9,我下载2.13.10allure显示空白页,把文章中路径改了即可

Allure安装与环境部署_安装allure-CSDN博客

f1

安装完成后在终端输入以下代码打开auller测试报告

allure serve ./report

f2

先在终端输入下列代码:

allure generate report

文件中多出allure-report文件夹

在终端输入下面代码打开测试报告:

allure open allure-report/

jenkins运行pytest项目

先下载jenkins,参考下面链接:

Jenkins安装部署--图文详细-CSDN博客

在jenkins下载alluer插件:

全局配置

创建项目

#!/bin/bash
cd ${WORKSPACE}
pip3 install -r requirements.txt --user
pytest

最后即可在平台查看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值