requests实现接口自动化

Posted my_captain

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了requests实现接口自动化相关的知识,希望对你有一定的参考价值。

添加日志

添加日志同样是在Common目录下,创建一个存放日志的目录Logs和日志类MyLogger,实现的方式并不复杂,不再赘述,只是添加下源码

#MyLogger类
import logging
import time, os
from logging.handlers import RotatingFileHandler


#设置输出的日志内容格式
fmt = ‘%(asctime)s  %(filename)s  %(funcName)s [line:%(lineno)d] %(levelname)s %(message)s‘
datefmt = ‘%a, %d %b %Y %H:%M:%S‘

#设置当前时间
curTime = time.strftime("%Y-%m-%d %H%M", time.localtime())

#设置输出渠道——输出到控制台
hd_1 = logging.StreamHandler()

#设置输出渠道——输出到文件
hd_2 = RotatingFileHandler("E:/python_workshop/python_API/Logs/API_autoTest_log_{0}.log".format(curTime), backupCount=20, encoding="utf-8")

#设置root logger,由于basicConfig()的参数是**kwargs,所以参数要以key=value的形式传入
logging.basicConfig(format=fmt, datefmt=datefmt, level=logging.INFO, handlers=[hd_1, hd_2])

#调用输出方法
#logging.info("hehehe")

修改测试请求类TestMyRequest,加入日志并执行,可以看到一些效果

import unittest
import ddt
import re
import json, time
from Common.DoExcel import DoExcel
from Common.MyRequest import *
from Common.ReplaceVariable import ReplaceVariable
from Common.Context import Context
from Common.MyLogger import *
import logging



@ddt.ddt
class TestMyRequest(unittest.TestCase):
    do_excel = DoExcel(r"E:python_workshoppython_APITestDatasapi_info.xlsx")
    all_case_data = do_excel.read_allCaseData()



    @ddt.data(*all_case_data)
    def test_my_request(self, case_data):

        logging.info("{0}--接口请求开始啦!".format(case_data["用例说明"]))

        #替换请求参数
        case_data["request_data"] = ReplaceVariable.replace_varibale(case_data["request_data"])
        logging.info("替换后的请求参数是: " + case_data["request_data"])


        #请求数据反射
        if case_data["request_context"] != None:
            key, pattern = case_data["request_context"].split("=")
            value = re.findall(pattern, case_data["request_data"])[0]
            setattr(Context, key, value)


        method = case_data["method"]
        if method.lower() == "get":
            result = send_request(method, case_data["url"], params=json.loads(case_data["request_data"]))
        elif method.lower() == "post":
            result = send_request(method, case_data["url"], data=json.loads(case_data["request_data"]))


        #响应数据反射
        if case_data["response_context"] != None:
            key, pattern = case_data["response_context"].split("=")
            value = re.findall(pattern, result)[0]
            setattr(Context, key, value)


        #替换期望结果
        case_data["expect_data"] = ReplaceVariable.replace_varibale(case_data["expect_data"])
        logging.info("替换后的期望结果是: " + case_data["expect_data"])
        logging.info("接口的响应结果是: " + result)

        try:
            self.assertIsNotNone(re.search(case_data["expect_data"], result))
            logging.info("断言成功

")
        except Exception as e:
            logging.error("断言失败

")

技术图片

生成测试报告

在项目目录下新建一个存放报告的目录htmlReposts,再创建一个main.py类作为整个脚本执行的入口,其代码如下

import unittest
from HTMLTestRunnerNew import HTMLTestRunner
import time


#实例化TestSuite
suite = unittest.TestSuite()
#实例化TestLoader
loader = unittest.TestLoader()
#采用loader的discover方法收集测试用例,并将其加载到测试套件中
suite.addTests(loader.discover("E:/python_workshop/python_API/TestCases"))


#设置当前时间
curTime = time.strftime("%Y-%m-%d_%H-%M-%S")
#创建一个html文件
fs = open("E:/python_workshop/python_API/HTMLReports/API_TestReports_{0}.html".format(curTime), "wb")

#实例化HTMLTestRunner
runner = HTMLTestRunner(stream=fs, title="接口自动化测试报告", tester="小翟")
#运行测试用例
runner.run(suite)

运行后在HTMLReports目录下,生成对应的html测试报告

技术图片

路径配置化

可以发现,在我们的脚本里充斥着大量的绝对路径,诸如这样的

技术图片

一旦工程目录发生变化,给脚本的运行和维护带来了诸多不便。鉴于这种情况,把绝对路径配置化就显得很有必要。首先在Common目录下新建一个ConfDir类,类中的内容为

import os

cur_dir = os.path.split(os.path.abspath(__file__))[0]

htmlreports_dir = cur_dir.replace("Common", "HTMLReports")

testcases_dir = cur_dir.replace("Common", "TestCases")

testdatas_dir = cur_dir.replace("Common", "TestDatas")

logs_dir = cur_dir.replace("Common", "Logs")

接着修改MyLogger.py

from Common.ConfDir import *

#设置输出渠道——输出到文件
hd_2 = RotatingFileHandler("{0}/API_autoTest_log_{1}.log".format(logs_dir, curTime), backupCount=20, encoding="utf-8")

修改TestMyRequest.py

from Common.ConfDir import *

do_excel = DoExcel(testdatas_dir + "/api_info.xlsx")

最后修改main.py

from Common.ConfDir import *


#采用loader的discover方法收集测试用例,并将其加载到测试套件中
suite.addTests(loader.discover(testcases_dir))
...
#创建一个html文件
fs = open("{0}/API_TestReports_{1}.html".format(htmlreports_dir, curTime), "wb")

以上是关于requests实现接口自动化的主要内容,如果未能解决你的问题,请参考以下文章

Pytest+request+Allure实现接口自动化框架

Python+Requests实现接口自动化

想在java接口自动化里用上Python的requests?这样做就可以了

在java接口自动化里用上Py的requests?这样做就好

python+requests接口自动化4. 接口实现文件(图片)上传

python+requests接口自动化4. 接口实现文件(图片)上传