记录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; 数据类型,可以发送文件,也可 ...
随机推荐
- Matlab和C语言混合编程,包含目录的设定
如果.c文件不依赖于任何第三方库,那么mex编译很简单,只需要在matlab的命令行输入 mex test.c 即可. 但是如果这个c文件使用了第三方库文件,如opencv.gsl等等,那么就需要更改 ...
- 手机端仿ios的省市县3级联动脚本一
一,图片实例 二,代码 2.1,代码 $('#provinceCity_fu').click(function(){ var $this = $(this); new Picker({ "t ...
- TCP/IP资料整理
一.概念 1. TCP/IP常见帧格式 2. 详解网络嗅探工具的原理 二.API 1. Linux kernel tcp 连接建立详解——由listen系统调用的backlog参数引发的长篇大论
- Python 爬取 中关村CPU名字和主频
0.准备工作 1.相关教程 Python 爬虫系列教程:http://cuiqingcai.com/1052.html Python Web课程:http://ww ...
- mybatis快速入门(四)
mybatis动态标签<where><if><foreach>以及sql片段 1.创建一个包装类UserQueryVo.java package cn.my.myb ...
- CodeIgniter怎么引入公共的头部或者尾部文件(实现随意引入或分区域创建header.html,bodyer.html,footer.html)
除非你天赋异禀,凡事基本对任何人来说都是开头难的,且开头的事情如果没有做好 往往会打掉一个人对于某件事的希望及其激情,所以咱们先从容易的事情开始慢慢建立自己 信心.后面的事情咱们再慢慢推进. 如果你是 ...
- SEO优化策略
原文:http://www.upwqy.com/details/186.html 1 首先了解seo是什么 SEO是英文Search Engine Optimization的缩写,中文译为" ...
- tp5.带标签的缓存 创建和清除 测试
原文:http://www.upwqy.com/details/24.html 测试设置了标签的缓存的获取方式 和清除标签缓存. 有时候我们可能会对同类型的一些数据做统一缓存.和统一清除更新处理. 那 ...
- Web前端有价值的博客文章汇总
一.HTML 二.CSS 1.深入理解position和z-index属性 :https://www.cnblogs.com/zhuzhenwei918/p/6112034.html 2.BFC(清除 ...
- 探究c# lock
今天早上阅读前辈的代码,看到了这么一段代码,如下所示: lock("Execute") { string sqlStr = sbSQLScript.ToString(); } 看到 ...