• 【五、接口自动化测试】5分钟掌握python + requests接口测试


    你好啊!我是山茶,一个持续探索AI + 测试的程序员!

    在做接口测试时,在python中内置了HTTP库 urllib,可以用于发送http请求。基于urllib二次封装的三方库Requests,相较于urllib更佳简介易用。所以,在接口自动化测试中通常使用Requests库对接口进行测试

    Requests安装

    因为Requests是第三方库,所以需要对其进行安装,通常安装使用pip命令安装即可

    1. # 在终端命令行或python编辑工具pycharm的Terminal中输入以下指令即可
    2. pip install requests

    安装完成后,在编辑器中引入对应的库import requests

    Requests常见请求类型

    HTTP接口测试涉及到3个方面

    • 请求方法:get、post、put、 delete、head ......

    • 请求体:form、json、xml、 binary

    • 响应结果:status code、 response body、 json path、 xpath

    接口常见的请求方法及类型如下

    1. #【如有问题,关注公众号:程序员山茶】留言
    2. r = requests.get('http://127.0.0.1:8080/shancha/test_one') #get请求
    3. r = requests.post('http://127.0.0.1:8080/shancha/test_one', data = {'key':'value'})#post请求
    4. r = requests.put('http://127.0.0.1:8080/shancha/test_one', data = {'key':'value'})
    5. r = requests.delete('http://127.0.0.1:8080/shancha/test_one')
    6. r = requests.head('http://127.0.0.1:8080/shancha/test_one')
    7. r = requests.options('http://127.0.0.1:8080/shancha/test_one')
    8. #【如有问题,关注公众号:程序员山茶】留言
    9. # 构造请求目标
    10. import resquests
    11. r = requests.get('http://127.0.0.1:8080/shancha/test_one')
    12. print(r.status_code) # 响应结果为 200
    13. # 构造请求头
    14. url = 'http://127.0.0.1:8080/shancha/test_one'
    15. headers ={'user-agent': 'my-app/0.0.1'}
    16. r = requests.get(url, headers=headers)
    17. print(r.status_code) # 响应结果为 200
    18. # 构造请求cookie
    19. url = 'http://127.0.0.1:8080/shancha/test_one'
    20. cookies = dict(cookies_are='chengxuyuanshancha')
    21. r = requests.get(url, cookies=cookies)
    22. print(r.status_code) # 响应结果为 200

    Requests请求体构造

    请求体key:value 即键值对的形式存在,如query参数、form请求、binary请求(上传文件)以及json、xml、 json rpc等结构化请求

    1. # form 和 Json 示例如下
    2. #【如有问题,关注公众号:程序员山茶】留言
    3. # form请求
    4. payload = {'key':'valuel','key2':'value2'}
    5. r = requests.post("http://127.0.0.1:8080/shancha/test_one", data=payload)
    6. print(r.status_code) # 响应结果为 200
    7. # JSON请求
    8. url = 'http://127.0.0.1:8080/shancha/test_one'
    9. payload = {'some': 'data'}
    10. r = requests.post(url, json=payload)
    11. print(r.status_code) # 响应结果为 200

    Requests响应断言

    在做测试时,结果判断是功能实现的重要依据之一。结果判断也可以称之为响应断言,即对请求动作结果返回的预期

    • 响应的类型有多种

      • r.url:

      • r.status_code

      • r.headers

      • r.cookies

      • r.encoding

      • r.content

      • r.text

      • r.json()

    以接口API为例

    1. #【如有问题,关注公众号:程序员山茶】留言
    2. # 结构化响应断言方式
    3. import requests
    4. import json
    5. r = requests.get('https://api.github.com/repos/hiyongz/DjangoDemo')
    6. json_data = r.json()
    7. print(json.dumps(json_data, indent=4))
    8. # 返回信息结果为
    9. {
    10. "message": "API rate limit exceeded for 50.7.252.58. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)",
    11. "documentation_url": "https://docs.github.com/rest/overview/resources-in-the-rest-api#rate-limiting"
    12. }

    除了常用的Assert断言以外, 还有Hamcrest 断言、xml解析断言、schema断言、JSONPath断言等多种断言方式,断言也可以组合使用,在测试过程中要根据返回的结果数据选择适合的断言方法

    接口测试示例

    使用Springboot编写一个接口“/shancha/test_one”,且在web端也可以访问

    1. @RestController
    2. @RequestMapping("/shancha")
    3. public class FirstController {
    4. @Autowired
    5. FirstService firstService;
    6. @GetMapping("/test_one")
    7. public String showNlefer(){
    8. System.out.println("我是山茶,公众号:程序员山茶。有问题请公众号留言!");
    9. return "{\"name\":\"山茶\",\"公众号\":\"程序员山茶\"}";
    10. }
    11. }

    web端访问结果

    使用requests测试接口

    1. import requests
    2. def requestsShanCha():
    3. r = requests.get('http://127.0.0.1:8080/shancha/test_one')
    4. assert r.status_code == 200
    5. print(r.status_code)
    6. print(r.headers)
    7. print(r.content)
    8. print("返回信息结果:"+r.text)
    9. if __name__ == '__main__':
    10. requestsShanCha()

    响应结果如下所示,与web浏览器响应结果一致

    以上,本文完,如果你觉着有用就点个“赞呗👍”

    作者简介:

    程序员山茶,一个工作5年,并坚持探索测试之路的测试开发工程师。曾混迹于互联网大厂、IOTA行业领航企业、安全行业、大数据行业领航企业,欢迎和我一起沟通交流。


    欢迎关注我,  和我一起探索AI+测试之路,终身成长

  • 相关阅读:
    Centos7 中安装Elasticsearch
    【21天学习挑战赛】Python学习第三篇:os 标准库
    商城数据库设计说明书
    顺序表的折半查找法
    PHP表单处理的案例分析
    linux内存分配器
    PostgreSql linux 常用命令
    同花顺_知识_看盘技法
    VSCode怎么创建Java项目
    Linux备份Docker的mysql数据并传输到其他服务器保证数据级容灾
  • 原文地址:https://blog.csdn.net/weixin_53991455/article/details/136638914