记录python接口自动化测试(第一目)
Posted 我是冰霜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录python接口自动化测试(第一目)相关的知识,希望对你有一定的参考价值。
之前学习了使用jmeter+ant做接口测试,并实现了接口的批量维护管理(大概500多条用例),对“接口”以及“接口测试”有了一个基础了解,最近找了一些用python做接口测试的资料,一方面为了学习下如何使用python进行接口测试(如何做出一个简单基础的接口测试框架),另一方面也为了锻炼下如何用python写代码(接触python也有一段时间了,但是每次自己编程总有种提笔忘字的感觉,真是欠练!!)
首先,用python做接口测试,主要用到就是requests库和json库。
1.先看一个简单的demo
1 # -*- coding: UTF-8 -*- 2 import requests 3 get_url = \'http://localhost:7001/XXX\' 4 data = {\'userCode\':\'csqy123456\',\'userPWD\':\'123456\'} 5 r = requests.get(url=get_url, params=data, timeout=5) #产生一个名为r的Response对象,可以从这个对象中获取我们想要的信息; #get请求传参数时,使用params关键字 #timeout参数用来设定停止等待响应的时间 6 print(r.url) #返回请求url 7 print(r.json()) #以JSON格式解析响应内容 8 print(r.status_code) #返回状态码 9 print(r.raise_for_status()) #如果发送了一个错误请求,如404、500等,可以通过raise_for_status()来抛出异常 10 print(r.encoding) #查看requests使用了什么编码,同时可以用r.encoding属性来改变它 11 print(r.raw) #获取来自服务器的原始套接字响应 12 print(r.headers) #服务器返回给我们的响应头信息,也可以在传参时通过headers=XXX来定制请求头 13 print(r.request) #获取原来创建的Request对象 14 print(r.request.headers) #发送到服务器的请求头
1 # -*- coding: UTF-8 -*- 2 import requests 3 post_url = \'http://localhost:7001/XXX\' 4 payload2 = {\'approveSeq\':\'6610\',\'userCode\':\'qyzh123456_88\',\'projName\':\'测试项目\'} 5 r = requests.post(post_url, data=payload2, timeout=1) #post请求传参数时,使用data关键字
6 print(r.json())
7 print(r.status_code)
2.然后通过函数调用来发送get/post请求
# -*- coding: UTF-8 -*- import requests def send_get(url, data): """ 定义send_get函数,用来接收参数,发送get请求 """ r = requests.get(url=url, params=data) result = r.json() return result def send_post(url, data): """ 定义send_post函数,用来接收参数,发送post请求 """ r = requests.get(url=url, data=data) result = r.json() return result def main(url, method, data): """ 定义一个主函数,根据method是get或post,来调用send_post()或send_get() """ if method == \'POST\': r = send_post(url, data) # 如果是POST请求,则调用send_post() else: r = send_get(url, data) # 如果是GET请求,则调用send_get() return r # 将结果返回出去 url = \'http://localhost:7001/XXX\' data = { \'controlSeq\': \'2018118325\' } demo = main(url, \'GET\', data) print(demo)
3.定义一个类,对post请求和get请求进行封装
run_method.py
# -*- coding: UTF-8 -*- import requests import json class RunMain: """含有构造器""" def __init__(self, url, method, data=None): self.t = self.run_main(url, method, data) def send_post(self, url, data): r = requests.post(url=url, data=data) result = r.json() return json.dumps(result, indent=2, sort_keys=False, ensure_ascii=False) def send_get(self, url, data): r = requests.get(url=url, params=data) result = r.json() return json.dumps(result, indent=2, sort_keys=False, ensure_ascii=False) # 利用json.dumps将响应数据进行json格式的编码解析 # indent=2将输出结果缩进2个字符显示 # sort_keys=False,输出结果是否按照关键字排序 # json.dumps 序列化时对中文默认使用的ascii编码,ensure_ascii=False才会输出中文 # return result def run_main(self, url, method, data=None): if method == \'GET\': r = self.send_get(url, data) else: r = self.send_post(url, data) return r if __name__ == \'__main__\': url = \'http://localhost:7001/XXX\' data = { \'controlSeq\': \'2018118325\' } test = RunMain(url, \'GET\', data) # 因为有构造器 __init__,实例化时要带参数 print(test.t)
run_method.py
# -*- coding: UTF-8 -*- import requests import json
class RunMain: """无构造器""" def send_get(self, url, data): res = requests.get(url=url, params=data).json() return res def send_post(self, url, data): res = requests.post(url=url, data=data).json() return res def run_main(self, url, method, data=None): res = None if method == \'GET\': res = self.send_get(url, data) else: res = self.send_post(url, data) return res if __name__ == \'__main__\': url = \'http://192.168.0.53:7001/CommonService/api/control/controlProgress/query.v\' data = { \'controlSeq\': \'2018118325\' } run = RunMain() # 先实例化,实例化时不需要带参数 print(run.run_main(url, \'GET\', data))
ps.建议在封装运行方法类时,不要加构造器,这样就不需要在实例化时传参,在后面的主函数中从excel中取出参数后再传给类中的方法即可
下面是json.dumps使用前后的对比图
第一目的内容到此结束,一方面简单介绍下requests的用法,另一方面将post和get请求进行基本封装,通过实例化对象进行调用
以上是关于记录python接口自动化测试(第一目)的主要内容,如果未能解决你的问题,请参考以下文章
python接口自动化(二十七)--html 测试报告——上(详解)