20210225【pytest测试框架实战训练营】最火python 测试框架与接口测试技巧

第二节 基于企业微信的接口测试实战

image

参考链接

requests

安装

pip install requests

演示代码

# -*- coding: utf-8 -*-
# @Author : feier
# @File : test_requests.py
import json

import requests

# 带 query 的 get 请求
def test_get():
    # 接口 url
    get_url = "https://httpbin.ceshiren.com/get"
    # 定义请求参数,字典格式
    params = {
        "a": 1,
        "b": 2,
        "c": "cccc"
    }
    # 发起 get 请求,变量 r 接受响应数据
    r = requests.get(get_url, params=params)
    print(r.text)
    assert r.status_code == 200

# post 请求,form 表单格式请求参数
def test_post():
    post_url = "https://httpbin.ceshiren.com/post"
    data = {
        "form_key": "form_value",
        "form_key1": "form_value1"
    }
    r = requests.post(post_url, data=data)
    print(json.dumps(r.json(), indent=2, ensure_ascii=False))
    assert r.status_code == 200

# post 请求,上传文件
def test_upload():
    post_url = "https://httpbin.ceshiren.com/post"
    file = {
        "file": open("file.txt", "rb")
    }
    r = requests.post(post_url, files=file)
    print(r.text)
    assert r.status_code == 200

# post 请求,json 格式参数
def test_post_json():
    post_url = "https://httpbin.ceshiren.com/post"
    payload = {
        "some": "data"
    }
    header = {
        "myheader": "feier"
    }
    r = requests.post(post_url, json=payload, headers=header)
    print(r.text)
    print(r.json())
    print(r.content)
    print(r.raw)
    print(r.headers)
    assert r.status_code == 200

企业微信接口测试实战

获取 access_token

class TestToken:

    def test_get_token(self):
        '''
        获取 access_token
        :return:
        '''
        # 定义凭证
        corpid = "ww876064acebf0fa3c"
        corpsecret = "A7LgEhs_Ty_dYXO9BcgY04PJBdawQ6JPzxNQJpv9YxY"
        url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={corpid}&corpsecret={corpsecret}"
        r = requests.get(url)
        print(r.json())

allure

安装

  • 安装本地工具
  • 安装python插件
pip install allure-pytest

演示代码

import pytest
import requests
import allure

@allure.feature("access_token 接口测试")
class TestToken:

    @allure.story("access_token 正向用例")
    def test_get_token(self):
        '''
        获取 access_token 正向用例
        :return:
        '''
        # 定义凭证
        corpid = "ww876064acebf0fa3c"
        corpsecret = "A7LgEhs_Ty_dYXO9BcgY04PJBdawQ6JPzxNQJpv9YxY"
        params = {
            "corpid": corpid,
            "corpsecret": corpsecret
        }
        url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
        r = requests.get(url, params=params)
        print(r.json())
        token = r.json()["access_token"]
        print(token)
        assert r.status_code == 200
        assert r.json()["errmsg"] == "ok"

    @allure.story("access_token 异常用例")
    def test_get_token_unusual(self):
        '''
        异常逻辑的验证
        不传 corpsecret
        校验 corpsecret 必填逻辑
        :return:
        '''
        corpid = "ww876064acebf0fa3c"
        # corpsecret = "A7LgEhs_Ty_dYXO9BcgY04PJBdawQ6JPzxNQJpv9YxY"
        params = {
            "corpid": corpid,
            "corpsecret": None
        }
        url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
        r = requests.get(url, params=params)
        print(r.json())
        # token = r.json()["access_token"]
        # print(token)
        assert r.status_code == 200
        assert r.json()["errmsg"] == "corpsecret missing"

    @pytest.mark.parametrize(
        "corp_id, corp_secret, errmsg",
        [
            ("ww876064acebf0fa3c", "A7LgEhs_Ty_dYXO9BcgY04PJBdawQ6JPzxNQJpv9YxY", "ok"),
            ("ww876064acebf0fa3c", None, "corpsecret missing"),
            (None, "A7LgEhs_Ty_dYXO9BcgY04PJBdawQ6JPzxNQJpv9YxY", "corpid missing")
        ]
    )
    @allure.story("access_token 单接口验证")
    def test_token(self, corp_id, corp_secret, errmsg):
        '''
        参数化实现单接口多参数组合验证
        :return:
        '''
        params = {
            "corpid": corp_id,
            "corpsecret": corp_secret
        }
        url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
        r = requests.get(url, params=params)
        print(r.json())
        with allure.step("验证响应状态码"):
            assert r.status_code == 200
        with allure.step("验证错误信息"):
            assert r.json()["errmsg"] == errmsg

allure 命令

  • 生成 allure 测试结果:pytest --alluredir=./result
  • 展示报告:allure serve ./result
  • 生成最终版本的报告:allure generate ./result