时间:2021-05-23
1)环境准备:
接口测试的方式有很多,比如可以用工具(jmeter,postman)之类,也可以自己写代码进行接口测试,工具的使用相对来说都比较简单,重点是要搞清楚项目接口的协议是什么,然后有针对性的进行选择,甚至当工具不太适合项目时需要自己进行开发。
在我们项目的初期,我们采用的是jmeter进行接口测试,当时觉得这个工具上手简单,团队成员学习成本低,并且接口测试的脚本稍微调整一下还可以用来做性能测试。
不过随着项目规模、团队人数的不断增长,渐渐的这个工具有适应不了当前项目的需求了,为此我们项目也重新开发了相关接口自动化的平台。但是,但是。。。可能是我让大家中毒太深,现在很多同学一提到接口测试关联到jmeter,为此,我深深感到不安。毕竟jmeter只是个工具,换个项目换个协议你是否还能玩转接口测试呢?session和cookie有什么区别?工具又是怎么实现的呢?
比如session如何保存,接口依赖如何处理,case如何管理及执行顺序,测试数据如何管理等等题,这个过程也有助于我们更加深刻的理解接口测试和http协议。
本文主要采用python语言,python中http协议接口相关的库有urllib,urllib2以及reqeusts库,这其中reqeusts库用来起来最方便,因此我也主要采用requests库来做http协议的接口测试。首先来看下需要哪些环境信息:
一、安装python
mac下自带安装了python,这个不多说了。
二、安装虚拟环境:
我们在一台机器上可以安装多个python版本,为了使每个版本的环境相互不受干扰,可以安装虚拟环境,安装方法如下:
1、安装virtualenv:pip install virtualenv
2、新建名为venv的虚拟环境:virtualenv venv
3、进入新环境:source venv/bin/activate
4、退出:deactivate
三、安装requests库:
>>>pip install requestsps:用python做http协议的接口测试会用到这个库。
四、http测试工具:
一个使用 Python + Flask 编写的 HTTP 请求和响应服务,该服务主要用于测试 HTTP 库。后续测试我们都基于这个网站。
http://httpbin.org
五、在本地搭建httpbin:
考虑到测试时要不断访问 httpbin 网站,请求过多担心被拉到黑名单,我们自己在本志搭建一套httpbin服务。
1、安装:pip install gunicorn
2、安装:pip install httpbin
3、启动:gunicorn httpbin:app
至此,环境搭建已经完毕,可以开始玩了~
(2)requests.get()
环境搭建好后,接下来我们先来了解一下requests的一些简单使用,主要包括:
requests常用请求方法使用,包括:get,postrequests库中的Session、Cookie的使用其它高级部分:认证、代理、证书验证、超时配置、错误异常处理等。
本节首先来了解一下requests库中如何发送get请求:
一、看下方法定义:
1、到官方文档去了下requests.get()方法的定义,如下:
2、点击右上角的【source】,看一下它的源码如下:
看到最后一行return,get方法最后是通过调用 requests.request方法实现的,其实在其它的请求方法如post,put,head,delete等方法都是调用的request方法,然后把请求方法的类型传递给request方法第一个参数。
3、HTTP协议是一个基于请求/响应模式的、无状态的,应用层协议。既然有请求,就有响应,来看下resquest中常用的响应信息:
二、get方法简单使用:
1、不带参数的get:
# -*- coding:utf-8 -*-#不带参数的getimport requestsimport jsonhost = "http://httpbin.org/"endpoint = "get"url = ''.join([host,endpoint])r = requests.get(url)#response = r.json()print type(r.text)print (eval(r.text))输出:
{ 'origin': '183.14.133.88', 'headers': { 'Connection': 'close', 'Host': 'httpbin.org', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'python-requests/2.18.1' }, 'args': { }, 'url': 'http: //httpbin.org/get'}2、 带参数的get:
# -*- coding:utf-8 -*-#带参数的getimport requestsimport jsonhost = "http://httpbin.org/"endpoint = "get"url = ''.join([host,endpoint])params = {"show_env":"1"}r = requests.get(url=url,params=params)print r.url输出:
http://httpbin.org/get?show_env=1{ 'origin': '183.14.133.88', 'headers': { 'X-Request-Id': 'ebe922b4-c463-4fe9-9faf-49748d682fd7', 'Accept-Encoding': 'gzip, deflate', 'X-Forwarded-Port': '80', 'Total-Route-Time': '0', 'Connection': 'close', 'Connect-Time': '0', 'Via': '1.1vegur', 'X-Forwarded-For': '183.14.133.88', 'Accept': '*/*', 'User-Agent': 'python-requests/2.18.1', 'X-Request-Start': '1504755961007', 'Host': 'httpbin.org', 'X-Forwarded-Proto': 'http' }, 'args': { 'show_env': '1' }, 'url': 'http: //httpbin.org/get?show_env=1'}3、带header的get:
# -*- coding:utf-8 -*-import requestsimport jsonhost = "http://httpbin.org/"endpoint = "get"url = ''.join([host,endpoint])headers = {"User-Agent":"test request headers"}r = requests.get(url)r = requests.get(url,headers=headers)#response = r.json()print (eval(r.text))['headers']['User-Agent']输出:
test request headers4、同时带参数和header:
# -*- coding:utf-8 -*-import requestsimport jsonhost = "http://httpbin.org/"endpoint = "get"url = ''.join([host,endpoint])headers = {"User-Agent":"test request headers"}params = {"show_env":"1"}r = requests.get(url)r = requests.get(url,headers=headers,params=params)#response = r.json()print (eval(r.text))['headers']['User-Agent']print r.url输出:
test request headershttp://httpbin.org/get?show_env=1(3)requests.post()
一、方法定义
二、post方法简单使用
1、带数据的post
2、带header的post
3、带json的post
4、带参数的post
5、普通文件上传
6、定制化文件上传
7、多文件上传
一、方法定义:
1、到官方文档去了下requests.post()方法的定义,如下:
2、源码:
3、常用返回信息:
二、post方法简单使用:
1、带数据的post:
# -*- coding:utf-8 -*-import requestsimport jsonhost = "http://httpbin.org/"endpoint = "post"url = ''.join([host,endpoint])data = {'key1':'value1','key2':'value2'}r = requests.post(url,data=data)#response = r.json()print (r.text)输出:
{ "args": {}, "data": "", "files": {}, "form": { "key1": "value1", "key2": "value2" }, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Connection": "close", "Content-Length": "23", "Content-Type": "application/x-/9587820/1590802二、mac下配置:
1、终端进入python环境
2、输入:
import sysprint sys.path3、找到site-packages文件夹的路径并将下载的HTMLTestRunner.py文件拷贝到此的文件夹下
4、在python环境下,输入 import HTMLTestRunner 不报错即安装成功
三、使用该模块生成报告:
1、目录结构
2、运行后生成报告如下:
3、run_all_case.py代码如下:
# -*- coding:utf-8 -*-import unittestimport osimport timeimport HTMLTestRunner# 用例路径case_path = os.path.join(os.getcwd())# 报告存放路径report_path = os.path.join(os.getcwd(), 'report')print report_pathdef all_case(): discover = unittest.defaultTestLoader.discover(case_path, pattern="test*.py", top_level_dir=None) print discover return discoverif __name__ == '__main__': # 1、获取当前时间,这样便于下面的使用。 now = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time())) # 2、html报告文件路径 report_abspath = os.path.join(report_path, "result_"+now+".html") # 3、打开一个文件,将result写入此file中 fp = open(report_abspath, "wb") runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'接口自动化测试报告,测试结果如下:', description=u'用例执行情况:') # 4、调用add_case函数返回值 runner.run(all_case()) fp.close()到此这篇关于Python接口自动化测试的实现的文章就介绍到这了,更多相关Python接口自动化测试内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
相信玩过爬虫的朋友都知道selenium,一个自动化测试的神器工具。写个Python自动化脚本解放双手基本上是常规的操作了,爬虫爬不了的,就用自动化测试凑一凑。
时隔已久,再次冒烟,自动化测试工作仍在继续,自动化测试中的数据驱动技术尤为重要,不然咋去实现数据分离呢,对吧,这里就简单介绍下与传统unittest自动化测试框
现在能用自动化实现的,尽量使用自动化程序去操作,代替人工去操作,更有效率。今天说下用python结合adb命令去实现安卓手机端的通话压力测试。#操作前先在设置里
谈到自动化测试,一般就会提到测试工具。许多人觉得使用了一、两个测试工具就是实现了测试自动化,这种理解是不对的,至少是片面的。的确,测试工具的使用是自动化测试的一
本文实例讲述了python自动化测试之异常及日志操作。分享给大家供大家参考,具体如下: 为了保持自动化测试用例的健壮性,异常的捕获及处理,日志的记录对掌握自动