记录python接口自动化测试--requests使用和基本方法封装(第一目)
之前学习了使用jmeter+ant做接口测试,并实现了接口的批量维护管理(大概500多条用例),对“接口”以及“接口测试”有了一个基础了解,最近找了一些用python做接口测试的资料,一方面为了学习下如何使用python进行接口测试(如何做出一个简单基础的接口测试框架),另一方面也为了锻炼下如何用python写代码(接触python也有一段时间了,但是每次自己编程总有种提笔忘字的感觉,真是欠练!!)
首先,用python做接口测试,主要用到就是requests库和json库。
1.先看一个简单的demo
# -*- coding: UTF-8 -*-
import requests
get_url = 'http://localhost:7001/XXX'
data = {'userCode':'csqy123456','userPWD':''}
r = requests.get(url=get_url, params=data, timeout=5) #产生一个名为r的Response对象,可以从这个对象中获取我们想要的信息; #get请求传参数时,使用params关键字 #timeout参数用来设定停止等待响应的时间
print(r.url) #返回请求url
print(r.json()) #以JSON格式解析响应内容
print(r.status_code) #返回状态码
print(r.raise_for_status()) #如果发送了一个错误请求,如404、500等,可以通过raise_for_status()来抛出异常
print(r.encoding) #查看requests使用了什么编码,同时可以用r.encoding属性来改变它
print(r.raw) #获取来自服务器的原始套接字响应
print(r.headers) #服务器返回给我们的响应头信息,也可以在传参时通过headers=XXX来定制请求头
print(r.request) #获取原来创建的Request对象
print(r.request.headers) #发送到服务器的请求头
# -*- coding: UTF-8 -*-
import requests
post_url = 'http://localhost:7001/XXX'
payload2 = {'approveSeq':'','userCode':'qyzh123456_88','projName':'测试项目'}
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': ''
}
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': ''
}
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': ''
}
run = RunMain() # 先实例化,实例化时不需要带参数
print(run.run_main(url, 'GET', data))
ps.建议在封装运行方法类时,不要加构造器,这样就不需要在实例化时传参,在后面的主函数中从excel中取出参数后再传给类中的方法即可
下面是json.dumps使用前后的对比图
第一目的内容到此结束,一方面简单介绍下requests的用法,另一方面将post和get请求进行基本封装,通过实例化对象进行调用
记录python接口自动化测试--requests使用和基本方法封装(第一目)的更多相关文章
- python - 接口自动化测试 - basic_data - 基础数据参数化方法封装
# -*- coding:utf-8 -*- ''' @project: ApiAutoTest @author: Jimmy @file: basic_data.py @ide: PyCharm C ...
- 记录python接口自动化测试--简单总结一下学习过程(第十目)
至此,从excel文件中循环读取接口到把测试结果写进excel,一个简易的接口自动化测试框架就完成了.大概花了1周的时间,利用下班和周末的时间来理顺思路.编写调试代码,当然现在也还有很多不足,例如没有 ...
- 记录python接口自动化测试--主函数(第六目)
把操作excel的方法封装好后,就可以用准备好的接口用例来循环遍历了 我的接口测试用例如下 主函数代码: run_handle_excel.py# coding:utf-8 from base.run ...
- 记录python接口自动化测试--unittest框架基本应用(第二目)
在第一目里写了几个简单demo,并把调用get和post请求的方法封装到了一个类里,这次结合python自带的unittest框架,用之前封装的方法来写一个接口测试demo 1.unittest简单用 ...
- 记录python接口自动化测试--从excel中读取params参数传入requests请求不生效问题的解决过程(第七目)
在第六目把主函数写好了,先来运行一下主函数 从截图中可以看到,请求参数打印出来了,和excel中填写的一致 但是每个接口的返回值却都是400,提示参数没有传进去,开始不知道是什么原因(因为excel中 ...
- 记录python接口自动化测试--利用unittest生成测试报告(第四目)
前面介绍了是用unittest管理测试用例,这次看看如何生成html格式的测试报告 生成html格式的测试报告需要用到 HTMLTestRunner,在网上下载了一个HTMLTestRunner.py ...
- 记录python接口自动化测试--把测试结果写进excel文件(第九目)
python中一般使用xlrd(excel read)来读取Excel文件,使用xlwt(excel write)来生成Excel文件(可以控制Excel中单元格的格式),需要注意的是,用xlrd读取 ...
- 记录python接口自动化测试--根据excel中的期望输出是否存在请求返回的响应来判断用例是否执行成功(第八目)
1.首先在excel中的expectValue列填好预期结果值 这里判断接口成功的依据是预期结果值是否存在于接口返回的数据中. 首先,要知道在之前封装的get/post请求方法中返回的是‘str’,也 ...
- python接口自动化测试 - requests库的post请求进行文件上传
前言 如果需要发送文件到服务器,比如上传图片.视频等,就需要发送二进制数据. 一般上传文件使用的都是 Content-Type: multipart/form-data; 数据类型,可以发送文件,也可 ...
随机推荐
- meta的各种参数
<!DOCTYPE html> <!-- 使用 HTML5 doctype,不区分大小写 --> <html lang="zh-cmn-Hans"&g ...
- How to verify Certificate Pinning?
Some friends of mine they worry about the risk of Man-in-the-middle so they ask me how to verify the ...
- 【BZOJ1096】【ZJOI2007】仓库建设(斜率优化,动态规划)
[BZOJ1096][ZJOI2007]仓库建设(斜率优化,动态规划) 题面 Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原 ...
- 【BZOJ1412】狼和羊的故事(网络流)
[BZOJ1412]狼和羊的故事(网络流) 题面 Description "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听 ...
- Windows Developer Day - MSIX and Advanced Installer
前面一篇我们介绍了 Adaptive Cards 的基础知识,而在 Windows Developer Day 的 Modern Application Experience 环节,还有一个需要划重点 ...
- JavaScript奇技淫巧
单行写一个评级系统 var rate = 3; "★★★★★☆☆☆☆☆".slice(5 - rate, 10 - rate); CSS调试黑科技,所有元素加 随机色的outlin ...
- java 开发 face++ 人脸特征识别系统
首先要在 face++ 注册一个账号,并且创建一个应用,拿到 api key 和 api secret: 下载 java 接入工具,一个 jar 包:https://github.com/FacePl ...
- 作为一个懒虫,如何优雅的使用windows
懒虫windows系列(一) 首先是快捷键,因为自己太懒了,觉得用鼠标很麻烦,下面总结一下自己最常用的快捷键(windows10 ) Ctrl+Shift+N:新建文件夹 F2:重命名 Ctrl + ...
- 【python学习笔记】8.异常
[python学习笔记]8.异常 raise Exception: 抛出指定异常 try/except: 捕捉异常 except: 第一个参数是需要捕获的异常类型,可以是多个类型组成元组,第二个参数是 ...
- JS获取当前周
var now = new Date() var weekFirstDay = new Date(now- (now.getDay() - 1) * 86400000) var firstMonth ...