python测试接口
1. python自动化测试接口怎么实现模拟不同的网络环境访问接口
用python做自动化测试,主要是接口测试和UI自动化测试。
一、接口测试:
http协议的举例:
可以用python自带的urllib\urllib2模拟,模拟前端向服务器发送数据,获取返回值后,进行校验和判断来进行接口测试。
网上的例子也比较多,这里简单说一下,
比如request中data的边界值测试、字符测试、非空为空测试等等,都可以做
二、UI自动化测试:
html页面(python+selenium)或者一些安卓app(python+appiun)可以用。
主要是页面元素的检查、输入等。
比如可以写一个脚本,自动登录网络页面,搜索某一个关键字,并且获得此关键字的网络搜索数量。
2. python怎么使用api接口测试
在开发中,需要测试web-api的接口 spring mvc 使用单元测试非常方便,但是,受不了单元测试的启动速度。用python写了一个小脚本,用于测试接口,
测试脚本配置文件
api.yaml
server:
url: http://127.0.0.1:9000/ihome/
api:
name:
#api-v2-neighbor-list.yaml
- api/v2/neighbor/list
api-v2-neighbor-list.yaml
接口配置文件
method:
post
data:
#post 的 body 的json
postSid: a1
userSid: u2
python 脚本
import requests, json, yaml, sys
def apiTest(apiName):
f = open("api.yaml")
obj = yaml.safe_load(f)
f.close()
if apiName != "":
runApi(obj["server"]["url"] + apiName, apiName.replace("/", "-") + ".yaml")
return;
apis = obj['api']["name"]
for api in apis:
runApi(obj["server"]["url"] + api, api.replace("/", "-") + ".yaml")
def runApi(url, dataFile):
headers = {'Content-Type' : 'application/json; charset=UTF-8',
'X-Requested-With' : 'XMLHttpRequest',
'Connection' : 'keep-alive',
'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36'
}
3. python 接口升级怎么测试
测试思路:
1、先把每个http接口一个一个写脚本测试。(提交的json串直接放在data字典中,这里没有用到excel等写测试用例,测试用例直接用脚本实现。)
2、写完所有接口的测试脚本后,由于一个接口有好几个测试用例,所有要把同一个接口的py脚本封装成方法,每一个接口封装成一个接口类。
3、用testsuite直接调用这些接口类,构造测试集;或利用unittest自动识别测试用例,TestLoader类中提供的discover()方法。
(命名规则:接口名称要以test_XXX开头)
就好把所有的接口测试用例连起来构建自动化测试了。
4、最后利用HTMLTestRunner生成测试报告。
4. python接口测试如何将
做过接口测试或者做过前端的人都知道,接口的访问方式是不一致的,所以才会使用postman来进行接口测试,因为它可以设置post和get方式。使用python模拟这俩种访问方式是重中之重。先说GET方式。GET方式就比较简单了,把接口放进浏览器地址栏,点下回车就完成了一次GET。所以就需要使用python访问URL就可以模拟一次GET 测试。
5. 如何用python unittest去测试c#的接口
1.首先使用 python 的 requests 对接口进行测试
[python] view plain
# TestInface.py
import requests,json
url = visit.get_test_url()
news_url = url+'news.info'
headers = baseToken.basetoken_datas()['headers']
def new_data(data):
r = requests.post(news_url,data=data,headers=headers)
cnn = json.loads(r.text)
return cnn
2.使用unittest调用接口,且对接口测试的结果进行统计
[python] view plain
# TestCase.py
# -*- coding:utf-8 -*-
import unittest
import TestInface
# 对执行的case结果进行统计
# ---------------------------------------------------------------------------------------------------------------------
text = ""
num_success = 0
num_fail = 0
# 测试通过
def decide_success(joggle):
global num_success
num_success += 1
print_out(joggle + ":接口测试通过\n")
return num_success
# 测试不通过
def decide_fail(txt, joggle):
global num_fail
num_fail += 1
print_out(joggle + ":接口测试未通过 \n错误信息: " + txt + "\n")
return num_fail
# 邮件内容写入 & 客户端输出
def print_out(message):
global text
text += "\n" + message
return text
# 返回值判断
def decide_result(result, code, joggle):
if result['code'] == code:
decide_success(joggle)
return "pass"
else:
txt = u"期望返回值:" + str(code) + u" 实际返回值:" + str(result) + '\n' + result['message']
decide_fail(txt, joggle)
return "fail"
def decide_Count():
data = {
'num_success': num_success,
'num_fail': num_fail,
'text': text
}
return data
# --------------------------------------------------------------------------------------------------------------------
# 定义 unittest
class MyTestCase(unittest.TestCase):
# 初始化工作
def setUp(self):
pass
# 退出清理工作
def tearDown(self):
pass
def test_Case1(self):
id = 16
data = {'id':id}
a = TestInface.new_data(data)
decide_result(a,0,'test_Case1')
3.使用suite对case进行管理
[python] view plain
# TestSuite.py
# -*- coding:utf-8 -*-
import unittest
import TestCase
def test_InterFace():
# 构造测试集
suite = unittest.TestSuite()
suite.addTest(TestCase("test_Case1")) # unittest中的测试用例
runner = unittest.TextTestRunner()
runner.run(suite)
#对测试集进行测试需要返回值
# return suite
if __name__ == '__main__':
# unittest.main(defaultTest='test_InterFace')
# 执行测试
runner = unittest.TextTestRunner()
runner.run(test_InterFace())
4.对接口的数据进行统计
[python] view plain
# TestCensus.py
# -*- coding:utf-8 -*-
import time
import TestSuite
import send_email
import TestCase
class Test_Calss():
def census(self):
text = ''
# 初始化测试起始时间
start_time = time.time()
# 调用suite测试集
TestSuite.test_InterFace()
# 结束执行时间计算
end_time = time.time()
result = TestCase.decide_Count()
# 接口测试统计说明
total_use_case = u"执行用例总数:" + str(result['num_success'] + result['num_fail']) + \
u"\t通过数:" + str(result['num_success']) + \
u"\t不通过数:" + str(result['num_fail'])
total_time = u"\t总共耗时:" + str(round((end_time - start_time), 3)) + u'秒'
text = result['text'] + total_use_case + total_time
print (text)
# 发生测试报告邮件
send_email.email_file(text)
if __name__ == '__main__':
Test_Calss().census()
[python] view plain
<pre code_snippet_id="2001712" snippet_file_name="blog_20161123_4_8691238"></pre><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897" name="code" class="python"><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897" name="code" class="python"><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897" name="code" class="python"><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897" name="code" class="python"><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897" name="code" class="python"><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897"></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<link rel="stylesheet" href="http://static.blog.csdn.net/public/res-min/markdown_views.css?v=1.0">
</pre></pre></pre></pre></pre>
6. python的哪个模块可以做接口测试
python接口测试
1.安装python环境
2.下载python IDE(pyCharm)
备注:
requests是python的要给HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而部用urllib2呢?官方文档中是这样说的:
python的标准库urllib2提供了大部分需要的HTTP功能,但API太逆天了,一个简单的功能需要一大堆代码。而requests比较简洁,能用更少的代码实现。
3.下载 安装 requests第三方模块
下面就进行接口测试
要使用 requests 首先需要在文件中引用
[python] view plain
import requests
[python] view plain
# 解析json需要
[python] view plain
import json
[python] view plain
# url:接口地址
[python] view plain
# data: 接口需要的数据
[python] view plain
# headers:接口需要的传递的headers数据
[python] view plain
# files:若是接口中需要上传文件则需要用到该参数
[python] view plain
r = requests.post(url, data=data, headers=headers)
[python] view plain
r = requests.post(url, data=data, headers=headers, files=files)
[python] view plain
# 获取 接口返回的数据信息并解析(如果返回的是json格式的话)
[python] view plain
json_data = json.loads(r.text)
[python] view plain
我一直用这样的方法写了20个接口进行测试,突然发现好像代码有很多重复的呀,是不是可以把重复的内容进行封装一下了?
[python] view plain
封装如下:
[python] view plain
Basics_Requests.py
[python] view plain
import requests
import json
'''''
#xx_url:接口连接url
#data:接口data需要传递的数据(数据格式一般为Dictionary)
#headers:接口headers需要传递的数据(数据格式一般为Dictionary)
#variable:headers 中需要改变的参数字段(数据格式为list)
'''
class Basics():
# 初始化
def __init__(self, xx_url, data, headers, variable):
self.xx_url = xx_url
self.data = data
self.headers = headers
self.variable = variable
def basicsparameter(self):
# 发起post请求
url_data = requests.post(self.xx_url, data=self.data, headers=self.headers)
# 把得到的数据转成json格式
data_json = json.loads(url_data.text)
# 改变请求中的参数值
if self.variable != '':
for i in self.variable:
self.headers[i] = data_json[i.lower()]
# 把请求的 数据 和 headers 存入 list中
dic_data = {'data_json': data_json, 'headers': self.headers}
return dic_data
调用封装方法:
[python] view plain
Test.py
[python] view plain
Basics_Requests
[python] view plain
Basics_Requests.Basics(url, row_data, headers, variable).basicsparameter()
[python] view plain
7. 什么是Python接口自动化测试,具体能做什么,说明白点
就是使python去实现接口测试,说白了就是写一些测试逻辑。python去写,速度快,简单python也有很多自动化测试相关的工具。roboframework,是一个自动化测试框架,写自动化非常简单。
8. python 接口测试怎么做断言
要看你是什么样的接口
比如比较简单的http
service
的接口,需要提供接口的访问地址,访问方式(get?
post?put?delete?),以及参数
然后用python来模拟发出请求,得到接口的返回,返回是否正确
你做测试,肯定清楚什么样的输入输出是正确的
9. 如何使用python根据接口文档进行接口测试
1,关于requests
requests是python的一个http客户端库,设计的非常简单,专门为简化http测试写的。
2,开发环境
mac下面搭建开发环境非常方便。
sudo easy_install pip
sudo pip install requests
测试下:python命令行
import requests
>>> r = requests.get('', auth=('user', 'pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text
u'{type:User...'
>>> r.json()
{u'private_gists': 419, u'total_private_repos': 77, ...}
开发工具,之前使用sublime,发现运行报错,不识别table字符。
IndentationError: unindent does not match any outer indentation level
非常抓狂的错误,根本找不到代码哪里有问题了。甚至开始怀疑人生了。
python的这个空格区分代码真的非常让人抓狂。开始怀念有大括号,分号的语言了。
彻底解决办法,直接换个IDE工具。使用牛刀,IDA开发。
直接下载社区版本即可,因为就是写个脚本啥的,没有用到太复杂的框架。
果然效果非常好,直接格式下代码,和java的一样好使,可以运行可以debug。右键直接运行成功。
3,测试接口
没有啥太复杂的,直接使用requests框架即可。
#!/usr/bin/python
# -*- coding: utf-8 -*-
################
import requests
#测试网络
def _func(url):
headers = {}
params = {}
req = requests.post(url, headers=headers, params=params)
print(req.text)
if __name__ == '__main__':
url =
_func(url)
4,总结
测试非常重要,尤其是对外的接口出现的漏洞,需要花时间去仔细测试,同时要仔细分析代码。
安全是挺重要的事情,要花时间去琢磨。
python学习还是非常容易学习的,一个小时就能把语法学会。
同时渗透测试,安全扫描的好多工具也是python写的。PyCharm CE版本的开发工具足够强大,能够帮你快速学习python。
如果想快速做点界面的开发,wxPython是非常不错的选择。
10. python怎么做接口测试工具
之前使用过urllib和urllib2做接口测试,在做的途中,感觉使用urllib2直接进行的get,post 请求并没有那么好用。作为测试人员,所需要的测试工具应当以方便为第一要务,测试的耗时只要是真正的无人值守,耗时不是太久的都可以接受。所以,本人又尝试了一个新的包:requests。
Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。Requests 的哲学是以 PEP 20 的习语为中心开发的,所以它比 urllib 更加 Pythoner。更重要的一点是它支持 Python3 !推荐一篇文章,上面有该包的详细说明传送门,以下只会写到我用到的部分,所以更多的了解需要自己去搜资料
好了,我们开始吧!!
接口测试中重要的部分:
1.get和post方法
2.用到的参数
3.请求头
4.cookie
5.日志输出
6.如何调试你的程序--借助fiddler
按照以上的顺序,我将一一说明我的搞法,因为编码能力有限,所以可能看着很low
一、get和post
requests包很好的实现了post和get方法,示例:
1 import requests2 response_get = requests.get(url, data, headers, cookies)3 response_post = requests.post(url, data, headers, cookies)
其他的访问方式如put,head等等,用法几乎都是如此,因为没用到,所以省略
现在一般的接口返回值有页面和json俩种,按照需求,可以分别使用response.text或者response.content获取,text获取的是unicode类型的返回值,而content返回值是str类型,所以我一般使用content来获取返回值,因为这样获取的返回值可以直接使用正则或者in的方式来验证返回值结果是否正确。
我自己为了实现接口的自动访问,所以又在requests上面加了一层封装,就像下面这样:
三、cookie
一款产品的接口测试中必定会使用登录状态,需要使用cookie实现,之前写过使用cookiejar获取cookie,requests中获取cookie的方法更为简单,不过首先你得知道是哪个接口set了cookie,不过一般是登录啦。登录接口访问之后set了cookie,那好,就去调用登录接口,然后拿到搞回来的cookie:
# 只需要这样!!login = requests.post(login_url, data=login_data, headers=login_header)
cookie = login.cookies
这个cookie就是登录状态了,拿着随便用,需要登录的就直接cookies=cookies
四、日志输出
这里注意看第二步中接口数据,有接口描述,也有接口是啥,第一步中又把content做成返回值了,具体拼接方式自己想吧,东西全有了,想写啥写啥,还可以加上获取本地时间的api获取接口运行时间,log文件该长啥样是门学问,这里就不献丑了。
五、借用fiddler调试你的脚本
requests允许使用代理访问,这有啥用,真有!fiddler是一款截包改包的工具,而且通过扩展可以进行请求间的比对,这样让你的程序访问的请求和真正正确的请求作对比,为啥我的程序访问出错?是不是缺了请求头?参数是不是丢了?cookie是不是少了?很容易看出来。写法如下:
proxies = { "http": "http://127.0.0.1:8888", "https": "http://127.0.0.1:8888"}
requests.post(url, proxies=proxies)
这样就可以走代理了,除fiddler以外还有charles和burp suite可以使用,具体看个人喜好吧。