接口测试实战

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)

posted @ 2023-02-21 15:03  当时只道是寻常呀  阅读(48)  评论(0)    收藏  举报