Python培训
400-996-5531
互联网公司对QA几乎有一个统一的要求:自动化测试能力。哪怕公司所有的测试都是业务测试,自动化能力也是个标配。对测试过程和质量保证过程中,适量的自动化能达到事半功倍的效果。
相对于UI自动化测试,接口自动化测试更加稳定;
相对于白盒自动化测试,接口自动化更加容易;
接口自动化的好处,再老生常谈一下:
提高测试效率。这几乎是所有自动化测试的好处。
完成手工测试繁琐的工作,但对自动化测试却很easy的事情。
反复执行。执行次数越多,收益越大。
提高/维持测试覆盖率。通过自动化来覆盖更多的场景,来提高代码覆盖率。
本文就以python 加 excel, 应用requests来搭建一个简易的自动化框架。
对于业务不是很复杂,单个的接口测试,用excel可以实现数据驱动,方便管理和维护case。
运用第三方库requests请求接口,根据结果和期望值进行断言,根据输出报告判断接口测试是否通过。
requests
是一个很实用的python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到。
安装方式一般采用
pip install requests
通过前一篇文章,搭建天气预报的api server.
我们设计一些用例如下:
先写一个manage excel的类:
import xlrd
class readExcel(object):
def __init__(self, path):
self.path = path
@property
def getSheet(self):
# 获取索引
xl = xlrd.open_workbook(self.path)
sheet = xl.sheet_by_index(0)
return sheet
@property
def getRows(self):
# 获取行数
rows = self.getSheet.nrows
return rows
@property
def getCol(self):
# 获取列数
col = self.getSheet.ncols
return col
# 以下是分别获取每一列的数值
def getName(self, column_index):
if column_index <= self.getCol:
ColumnName = []
for i in range(1, self.getRows):
ColumnName.append(self.getSheet.cell_value(i, column_index))
return ColumnName
else:
print("输入的column不合法!")
然后写一个处理接口的类,对于大多数接口来说,我们只用到get, post方法:
import requests
class testApi(object):
def __init__(self, method, url, data):
self.method = method
self.url = url
self.data = data
@property
def testApi(self):
# 根据不同的访问方式来访问接口
try:
if self.method == 'post':
if self.data == "":
print("No data post")
else:
result = requests.post(self.url, data=(self.data).encode('utf-8'))
elif self.method == 'get':
if self.data == "":
result = requests.get(self.url)
else:
result = requests.get(self.url, params=self.data)
return result
except:
print('失败')
def getCode(self):
# 获取访问接口的状态码
code = self.testApi.status_code
return code
def getJson(self):
# 获取返回信息的json数据
json_data = self.testApi.json()
return json_data
写个管理全局变量的文件:
from manageexcel import readExcel
CASE_NUMBER = 0 #用例编号
CASE_NAME = 1 #用例名称
CASE_METHOD = 2 #请求类型
CASE_URL = 3 #请求地址
CASE_DATA = 4 #用例数据
CASE_STATUS = 5 #用例状态
CASE_KEY = 6 #验证关键字
file_path = "/Users/anderson/PycharmProjects/restfulapi/api_data.xlsx"
host = "http://localhost:5000"
row_num = readExcel(file_path).getRows
class CASE:
number = readExcel(file_path).getName(CASE_NUMBER)
name = readExcel(file_path).getName(CASE_NAME)
method = readExcel(file_path).getName(CASE_METHOD)
url = readExcel(file_path).getName(CASE_URL)
data = readExcel(file_path).getName(CASE_DATA)
status = readExcel(file_path).getName(CASE_STATUS)
key = readExcel(file_path).getName(CASE_KEY)
接着就可以写实现用例了:
import unittest
from globals import CASE,host,row_num
from manageapi import testApi
class testWeatherApi(unittest.TestCase):
def testWeatherApi(self):
'''测试获取城市天气接口。'''
for i in range(0, row_num - 1):
api = testApi(CASE.method[i], host + CASE.url[i], CASE.data[i])
apicode = api.getCode()
apijson = api.getJson()
if apicode == CASE.status[i]:
print('{}、{}:测试成功。json数据为:{}'.format(i + 1, CASE.name[i], apijson))
else:
print('{}、{}:测试失败'.format(i + 1, CASE.name[i]))
if __name__ == '__main__':
unittest.main(verbosity=2)
运行成功!
可以写一个执行suite的文件,并引入测试报告:
import unittest
from testcity import testWeatherApi
from HTMLTestRunner import HTMLTestRunner
testunit = unittest.TestSuite()
testunit.addTest(testWeatherApi("testWeatherApi"))
fp = open('./result.html','wb')
runner = HTMLTestRunner(stream=fp,title="API测试报告",description="测试执行情况")
runner.run(testunit)
fp.close()
报告如下:
一个简单的接口测试框架就搭建起来了,麻雀虽小,五脏俱全,当然可继续实现发送邮件,集成CI。
对于简单的接口,用数据驱动来实现自动化更简单方便,实现起来简单快捷。
填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved