接口自动化尝试--利用企业微信api测试会议室api

 测试百度

# -*- coding: utf-8 -*-
import requests
import unittest

class Bobo_test(unittest.TestCase):

    def setUp(self) -> None:
        self.session=requests.Session()
        self.url="https://www.baidu.com/"
        self.ver="https://www.baidu.com/"
        pass

    def tearDown(self) -> None:
        self.session.close()
        pass

    def test_001_success(self):
        res=self.session.get(url=self.url)
        res.encoding="utf-8"
        self.assertEqual(200,res.status_code)
        print(res.headers.get("Content-Type"))
        self.assertIn("text/html",res.headers.get("Content-Type"))
        self.assertIn("百度一下,你就知道",res.text)
        


生成测试报告:加上时间

import time
import unittest
from HTMLTestRunner import HTMLTestRunner

now=time.strftime("%Y%m%d %H%M%S")

suite=unittest.TestLoader().discover(r"D:\PyCharm Community Edition 2021.3.2\jbr\bin\pythonProject\0322_02","app.py")
with open("./report"+now+".html","wb") as fp:
    runner=HTMLTestRunner(stream=fp,title="test",description="first")
    runner.run(suite)

利用企业微信api测试会议室api

demo:

import requests
url=xxxxxxxxxxxxxxxxxxxxxx

request.get(url)

BasePage类:

创建setupCls,

创建BaseCase继承unit test,用json获取接口

import unittest

import requests


class BaseCase(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wwcbed2b77ca1bea09&corpsecret=xDgWbqrkUrotJR54pSChlp-baZFxG1REo7_d0gmfbD8"
        r = requests.get(url)
        cls.token = r.json()['access_token']

重写DEMO类并尝试获取打印token:

import requests
import unittest
from core.basecase import BaseCase
class TestDemo(BaseCase):
    def test_01(self):
        self.token
        print(self.token)

    def test_02(self):
        self.token
        print(self.token)

if __name__ == '__main__':
    unittest.main(verbosity=2)

yaml文件的写入:

weixin:
  corpid: wwcbed2b77ca1bea09  #id
  corpsecrets: #xDgWbqrkUrotJR54pSChlp-baZFxG1REo7_d0gmfbD8
    mettingroom: xDgWbqrkUrotJR54pSChlp-baZFxG1REo7_d0gmfbD8  #

python读取yaml文件的方法:

yaml文件设置编码前不要有中文,否者会报错,并且不好排查!!!!

安装pip install pyyaml

import yaml
import os
filepath=os.path.join(os.path.dirname(__file__),"configdata.yaml")
#或者
#filePath=os.path.join(r"D:\pycharm\PyCharm Community Edition 2021.1.3\jbr\bin\pythonProject\qiyeweixin\config\configdata.yaml")

with open(filepath) as file:
    configdata=yaml.safe_load(file)
    print(configdata)

获取到token后把BaseCase的url写成变量-----------json格式

引用json和yaml的数据变量一定是f+大括号f{}{configdata['weixin']['corpid']}

url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={configdata['weixin']['corpid']}&corpsecret={configdata['weixin']['corpsecrets']['mettingroom']}"
import unittest

import requests
from config import configdata


class BaseCase(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={configdata['weixin']['corpid']}&corpsecret={configdata['weixin']['corpsecrets']['mettingroom']}"
        r = requests.get(url)
        cls.token = r.json()['access_token']

加日志,打印到控制台并输出到文件:

""""
1实现控台输出
2运行日志记录到文件
"""
import logging
import os
import unittest

logger=logging.getLogger("wxapi")
logger.setLevel(logging.DEBUG)

formatter=logging.Formatter("%(asctime)s %(levelname)s %(message)s")

sh=logging.StreamHandler()
sh.setFormatter(formatter)
sh.setLevel(logging.DEBUG)

#添加控制台输出
logger.addHandler(sh)

#定义日志存放路径
logPath=os.path.join(r"D:\pycharm\PyCharm Community Edition 2021.1.3\jbr\bin\pythonProject\testapi3\logs")

if not os.path.exists(logPath):
    os.mkdir(logPath)
logfile=os.path.join(logPath+"./wxapi.log")
fh=logging.FileHandler(logfile)
fh.setFormatter(formatter)
fh.setLevel(logging.DEBUG)

logger.addHandler(fh)

if __name__ == '__main__':
    logger.info("this is test")


td添加会议室和上下游传参:

import random
from pojo import MeetingRoom

from core.basecase import BaseCase
class TestMeetingRoom(BaseCase):

    def test_add_meeting(self):
        """
        添加会议室

        :return:
        """
        url=f"https://qyapi.weixin.qq.com/cgi-bin/oa/meetingroom/add?access_token={self.token}"
        data=(
            {
                "name": f"{random.random()}F-会议室",
                "capacity": 10,
                "city": "深圳",
                "building": "腾讯大厦",
                "floor": "18F",
                "equipment": [1, 2, 3],
                "coordinate":
                    {
                        "latitude": "22.540503",
                        "longitude": "113.934528"
                    }
            }
        )
        r=self.requests(method="post",url=url,json=data)

        #添加断言
        self.assertEqual(r.json()["errcode"],0)
        self.assertEqual(r.json()["errmsg"],"ok")
        #设置上下游传参
        MeetingRoom.meetingroom_id=r.json()["meetingroom_id"]

    def test_del_meetingroom(self):
        url=f"https://qyapi.weixin.qq.com/cgi-bin/oa/meetingroom/del?access_token={self.token}"
        deldata={
            "meetingroom_id":MeetingRoom.meetingroom_id
        }
        r=self.requests(method="post",url=url,json=deldata)
        #添加断言
        self.assertEqual(r.json()["errcode"],0)
        self.assertEqual(r.json()["errmsg"],"ok")

复杂断言问题的处理:

    def test_02query_meeting(self):
        '''
        查询会议室
        :return:
        '''
        url=f"https://qyapi.weixin.qq.com/cgi-bin/oa/meetingroom/list?access_token={self.token}"
        querydata={
          "city":"深圳",
          "building":"腾讯大厦",
          "floor":"18F",
          "equipment":[1,2,3]
        }
        r=self.requests(method="post",url=url,json=querydata)
        meetingroom_list=r.json()["meetingroom_list"]

        tmplist=[]
        for meetingroom in meetingroom_list:
            tmplist.append(meetingroom["meetingroom_id"])
        #print(tmplist)
        #添加断言:会议室id在tmplist中
        self.assertTrue(MeetingRoom.meetingroom_id in tmplist)

简单的ddt数据驱动入门:不方便,

from ddt import ddt,data,unpack
from core.basecase import BaseCase

@ddt
class TestMeetingRoomDDT(BaseCase):
    @data(["1234567890123456789012345678901",40058,'name exceed max utf8 words 30'],["",40058,'missing paramters name'])
    @unpack
    def test_add_meeting(self,name,expect_errcode,except_errmsg):
        '''
        测试异常场景
        :return:
        '''
        url = f"https://qyapi.weixin.qq.com/cgi-bin/oa/meetingroom/add?access_token={self.token}"
        data = {
            "name": name,
            "capacity": 10
        }
        r = self.requests(method="post", url=url, json=data)
        # 添加断言
        self.assertEqual(r.json()["errcode"], expect_errcode)
        #self.assertEqual(r.json()["errmsg"], "ok")
        self.assertTrue(except_errmsg in r.json()["errmsg"])

json格式:注意和yaml格式的区别

{
  "name_value_more_than_31": {
    "name": "1234567890123456789012345678901",
    "expect_errcode": 40058,
    "expect_errmsg": "name exceed max utf8 words 30"
  },
  "name_value_is_null": {
    "name": "",
    "expect_errcode": 40058,
    "expect_errmsg": "missing paramters name"
  }
}

使用json文件进行数据驱动:

class TestMeetingRoomDDT(BaseCase):
    @file_data(r"D:\pycharm\PyCharm Community Edition 2021.1.3\jbr\bin\pythonProject\testapi3\testdata\meetingroom\addmeetingroom.json")
    def test_add_meetingroom_filedata(self,name,expect_errcode,expect_errmsg):

        url = f"https://qyapi.weixin.qq.com/cgi-bin/oa/meetingroom/add?access_token={self.token}"
        data = {
            "name": name,
            "capacity": 10
        }
        r = self.requests(method="post", url=url, json=data)
        # 添加断言
        self.assertEqual(r.json()["errcode"], expect_errcode)

yaml的数据驱动:

yaml格式:


  name_value_more_than_31:
    name: 1234567890123456789012345678901
    expect_errcode: 40058
    expect_errmsg: name exceed max utf8 words 30

  name_value_is_null:
    name: ''
    expect_errcode: 40058
    expect_errmsg: missing paramters name

yaml的数据驱动: 

@ddt
class TestMeetingRoomDDT(BaseCase):
    @file_data(r"D:\pycharm\PyCharm Community Edition 2021.1.3\jbr\bin\pythonProject\testapi3\testdata\meetingroom\addmeetingroom.yaml")
    def test_add_meetingroom_yaml(self,name,expect_errcode,expect_errmsg):

        url = f"https://qyapi.weixin.qq.com/cgi-bin/oa/meetingroom/add?access_token={self.token}"
        data = {
            "name": name,
            "capacity": 10
        }
        r = self.requests(method="post", url=url, json=data)
        # 添加断言
        self.assertEqual(r.json()["errcode"], expect_errcode)

测试套件运行测试用例:

import unittest
from testcases.test_mettingroom import TestMeetingRoom
from test_ddt.test_meetingroom_ddt import TestMeetingRoomDDT

def allTests():
    '''
    执行所有的用例
    :return:
    '''
    #测试套件
    suite=unittest.TestSuite()
    #测试加载器
    loader=unittest.TestLoader()
    alltests=loader.discover(start_dir="testcases")#文件路径
    #添加到测试用例集
    suite.addTests(alltests)
    return alltests

#运行特定测试用例
def smokeTests():
    suite=unittest.TestSuite()
    loader=unittest.TestLoader()
    suite.addTest(TestMeetingRoom("test_01add_meeting"))#运行单个用例
    #添加多个测试用例要用loader
    alltest=loader.loadTestsFromTestCase(TestMeetingRoom)#运行一个类的所有文件
    suite.addTest(alltest)
    return suite

if __name__ == '__main__':
    runner=unittest.TextTestRunner(verbosity=2)
    #runner.run(allTests())
    runner.run(smokeTests())

测试报告:

from testcases.test_mettingroom import TestMeetingRoom
from test_ddt.test_meetingroom_ddt import TestMeetingRoomDDT

from BeautifulReport import BeautifulReport

if __name__ == '__main__':
    #runner=unittest.TextTestRunner(verbosity=2)
    #runner.run(allTests())
    #runner.run(smokeTests())
    runner=BeautifulReport(smokeTests())
    runner.report(description="企业api的测试和使用",report_dir=r"D:\pycharm\PyCharm Community Edition 2021.1.3\jbr\bin\pythonProject\testapi3\report")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值