1.base_api完成对api的驱动
import req
import requests
from jsonpath import jsonpath
class BaseApi:
# def send(self,req):
# return requests.request(**req)
def send(self,req):
return requests.request(**req)
def jsonpath_res(self,obj,expr): #封装jsonpath
return jsonpath(obj, expr)
2.继承api后,完成对接口的封装
import json
import requests
from base_api import BaseApi
class WeWork(BaseApi):
def __init__(self, secret):
# 创建一个类变量,通过调用self.get_token()函数,获取token信息
self.token = self.get_token(secret)
def get_token(self, secret):
# url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
# params11 = {
# "corpid": "wwa7730132c2af64d5",
# "corpsecret": "MZX9W-pY_ZiSJrIb6f_18QwSN1j_ymEm1CIe4ecEetE"
# }
# res = requests.request(method="GET", url=url, params=params11)
req = {"url": "https://qyapi.weixin.qq.com/cgi-bin/gettoken",
"method":"get",
"params": {
"corpid": "wwa7730132c2af64d5",
"corpsecret": secret
}}
res = self.send(req)
return res.json()["access_token"]
3.数据构造与测试用例的数据封装
import requests
from wework import WeWork
class Department(WeWork):
def create_department(self, name, name_en, department_id):
# url = "https://qyapi.weixin.qq.com/cgi-bin/department/create"
# data1 = {
# "name": name,
# "name_en": name_en,
# "parentid": 1,
# "order": 1,
# "id": department_id
# }
#
# params = {
# "access_token": self.token
# }
# r = requests.request(method="POST", url=url, params=params, json=data1)
req = {"url": "https://qyapi.weixin.qq.com/cgi-bin/department/create",
"method": "post",
"json": {
"name": name,
"name_en": name_en,
"parentid": 1,
"order": 1,
"id": department_id
}, "params": {
"access_token": self.token
}}
r = self.send(req)
return r.json()
def update_department(self, name, name_en, department_id):
# url = f"https://qyapi.weixin.qq.com/cgi-bin/department/update?access_token={self.token}"
# data = {
# "id": department_id,
# "name": name,
# "name_en": name_en,
# "parentid": 1,
# "order": 1
# }
# r2 = requests.request(method="POST", url=url, json=data)
req = {"url": f"https://qyapi.weixin.qq.com/cgi-bin/department/update?access_token={self.token}",
"method": "post",
"json": {
"id": department_id,
"name": name,
"name_en": name_en,
"parentid": 1,
"order": 1
}}
r = self.send(req)
return r.json()
def delete_department(self, department_id):
# url = f"https://qyapi.weixin.qq.com/cgi-bin/department/delete?access_token={self.token}&id={department_id}"
# r = requests.request(method="GET", url=url)
req = {
"url": f"https://qyapi.weixin.qq.com/cgi-bin/department/delete?access_token={self.token}&id={department_id}",
"method": "GET"}
r = self.send(req)
return r.json()
def get_department_list(self):
# url = f"https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token={self.token}"
# r3 = requests.request(method="GET", url=url)
req = {"url": f"https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token={self.token}",
"method":"GET"}
r = self.send(req)
return r.json()
4.调用api对象实现业务并断言
import pytest
import json,yaml
from jsonpath import jsonpath
from department import Department
class TestWinXin:
def setup_class(self):
conf = yaml.load(open("config.yaml"))
secret = conf["department_secret"]
self.department = Department(secret=secret)
@pytest.mark.parametrize("name,name_en,department_id",
[("广州研发中心8", "RG56886", 8),
("广州研发中心1111111111111111111111111111111111111111111111" ,"RDGZ" ,4)])
def test_create_department(self, name, name_en, department_id):
r = self.department.create_department(name, name_en, department_id)
if len(name) > 32:
assert r["errcode"] == 60001
else:
assert r["errcode"] == 0
# print(r.json())
@pytest.mark.parametrize("name,name_en,department_id",
[("广州白云", "RG56886", 8)])
def test_update_dapartment(self, name, name_en, department_id):
r2 = self.department.update_department(name, name_en, department_id)
# assert r2["errmsg"] == "updated"
r3 = self.department.get_department_list()
name_list = self.department.jsonpath_res(r3, "$..name")
print(name_list)
assert "广州白云" in name_list
department_name = self.department.jsonpath_res(r3, "$..department[?(@.id==8)].name")[0] #//判断id==8的name=="广州白云"
assert department_name == "广州白云"
# print(json.dumps(r3, ensure_ascii=False)) //打印所有的部门信息
# # print(r3['department'][1]['name'])
# assert r3['department'][1]['name'] == "广州白云"
@pytest.mark.parametrize("department_id",[8])
def test_delete_department(self,department_id):
r = self.department.delete_department(department_id)
assert r['errmsg'] == "deleted"
print(r)
def test_get_list(self):
r3 = self.department.get_department_list()
print(r3)