教你如何打造属于自己的接口测试框架(超详细版,持续更新中)

前言:对于接口自动化想必很多人都不陌生,有的人喜欢用jmeter+ant+jenkins,我现在公司的两个项目接口在线巡检就是用这个方式搭建的,对比用python编写的框架,优点是不用怎么写代码,个人认为使用哪种方法看项目使用的技术栈,是否满足所有接口的测试需求,从长远考虑,如果团队有代码基础。还是直接写接口测试代码比较灵活,这里不讲述jmeter接口自动化,教你打造属于自己的接口自动化框架,适合有python基础的同学,下面这个报告是用的jmeter做的接口自动化
在这里插入图片描述

一、接口测试框架Requests
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
官方文档:https://requests.readthedocs.io/en/master/
在这里插入图片描述
在这里插入图片描述
如果大家想要练习接口,可以用这个开源的项目搭建一套服务https://github.com/postmanlabs/httpbin
也可以直接访问已经搭建好的现成的环境或者自己用公司的项目
https://httpbin.org

在这里插入图片描述
在这里插入图片描述

import requests


class TestDemo:
    def test1(self):
        r = requests.get("https://httpbin.org/get")
        print(r.status_code, r.json())
        assert r.status_code == 200

在这里插入图片描述
二、 接口请求构造GET/POST/PUT/HEAD
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

def test_query(self):
        payload = {"name": "BruceLee", "age": 18}
        r = requests.get("https://httpbin.org/get", params=payload)
        print(r.status_code, r.text)
        assert r.status_code == 200

在这里插入图片描述
在这里插入图片描述

    def test_form_post(self):
        payload = {"name": "BruceLee", "age": 18}
        r = requests.post("https://httpbin.org/post", data=payload)
        print(r.status_code, r.text)
        assert r.status_code == 200

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
post可以支持哪一些参数呢,我们可以看post的源码得出结果
在这里插入图片描述
在这里插入图片描述
三、接口测试断言
在这里插入图片描述
在这里插入图片描述

    def test_header(self):
        header = {"name": "BruceLee"}
        r = requests.post("https://httpbin.org/post", headers=header)
        print(r.status_code, r.json())
        assert r.json()['headers']['Name'] == 'BruceLee'

在这里插入图片描述
断言我们还可以用pip install pytest-assume(添加断言,同一条测试用例每一条的断言都会反馈出来)
参考:https://blog.csdn.net/weixin_44275820/article/details/105169871
我们断言的内容需要根据实际的项目添加,最基本的断言就是断言status_code

四、 JSON/XML请求
在这里插入图片描述

    def test_json_post(self):
        payload = {"name": "BruceLee", "age": 18}
        r = requests.post("https://httpbin.org/post", json=payload)
        print(r.status_code, r.text)
        assert r.status_code == 200

在这里插入图片描述

在这里插入图片描述
request没有帮我们封装xml,所以这里需要我们自己封装一个,对xml做特殊处理,请求的时候我们将header = {“Content-Type”: “application/xml”}定义好

# python3字符串换行,在右边加个反斜杠
def test_xml_post(self):
        xml = '<?xml version="1.0" encoding = "UTF-8"?>' \
              '<COM>' \
              '<REQ name="深圳-测试">' \
              '<USER_ID>yoyoketang</USER_ID>' \
              '<COMMODITY_ID>123456</COMMODITY_ID>' \
              '<SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>' \
              '</REQ>' \
              '</COM>'
        header = {"Content-Type": "application/xml"}
        # 遇到编码报错时候,对body进行encode
        r = requests.post("https://httpbin.org/post", data=xml.encode("utf-8"), headers=header)
        print(r.status_code, r.text)
        assert r.status_code == 200

在这里插入图片描述
xml格式的数据写到代码里面,不太直观,后期维护也不方便,可以把xml格式数据单独拿出来写到一个文件里,再用open函数去读取

import os
 
curpath = os.path.dirname(os.path.realpath(__file__))
xmlpath = os.path.join(curpath, "body1_xml")
 
with open(xmlpath, encoding="utf-8") as fp:
    body = fp.read()
 
 
# 读取xml文件
print(body)

具体细节可以参考:https://blog.csdn.net/xgh1951/article/details/80981580

扫描二维码关注公众号,回复: 11227046 查看本文章

在这里插入图片描述
在这里插入图片描述
五、JSON/XML响应断言
在这里插入图片描述

 def test_json(self):
        header = {"name": "BruceLee"}
        r = requests.post("https://httpbin.org/post", headers=header)
        print(r.status_code, r.json())
        assert r.json()['headers']['Name'] == 'BruceLee'
        #如果对象里面是一个数组,数组里面有多个对象,记得加上对应数组对象的索引

在这里插入图片描述
我们还可以用python的jsonpath第三方库:https://pypi.org/project/jsonpath-rw/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
官方文档:http://hamcrest.org

六、Schema断言
这个断言主要针对于返回json字段类型判断,因为在版本迭代过程中,开发不小心将字段类型定义错了,而测试过程中没有发现
在这里插入图片描述
官方文档:http://json-schema.org、https://jsonschema.net/home
在这里插入图片描述
在这里插入图片描述
七、Header Cookie处理
在这里插入图片描述

待更新,预计下周更新完

猜你喜欢

转载自blog.csdn.net/weixin_44275820/article/details/106209238