第二节 基于企业微信的接口测试实战
参考链接
- requests 官方文档:https://2.python-requests.org/en/master/
- 接口演练环境:http://httpbin.ceshiren.com/
- 企业微信接口文档:文档 - 企业微信开发者中心
- allure 下载地址: https://repo1.maven.org/maven2/io/qameta/allure/allure-commandline/2.13.7/
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