python接⼝⾃动化-excel参数化⼀
我们测试每个功能的时候,都不⽌⼀条⽤例,例如:登录,⽤例⾄少包含4条(1正确⽤户名,正确密码;2正确⽤户名,错误密码;3错误⽤户名,正确密码;4错误⽤户名,错误密码)。那么这4条⽤例,都是调⽤的⼀个接⼝,我们如果写⼀个登录类,⼀条⽤例⼀个⽅法的话,其实每个⽅法除了数据不⼀样,其他的全部都相同,那么代码就冗余了,所以我们可以把数据都放在⼀个⽤例⽂件⾥,然后去⽂件⾥取数据给接⼝调⽤就可以了。那具体怎么实施呢,我们来实例讲解⼀下。
1、需求
扫码功能:对图书的isbn进⾏扫码
2、⽤例
⽤例就直接写在表格⾥了,如下:
这⾥边的参数是写死的,只有第⼀条是正例,其他都是反例
其中测试结果和返回值是需要运⾏⽤例的时候写进来的。所以我们需要对表格有读,写,两个操作。
备注:
预期结果那⾥是我打算⽤来断⾔的,写的200,3000都是状态码,那么把这些写在表格⾥的时候,注意⼀定要把这⼀列的单元格格式设置为“⽂本”,否则可能会有⼩数点,导致判断不准确。
3、表格操作
⽣成⼀个读取表格的py⽂件,名称为case_data.py,代码如下:
import xlrd  #读表格⽤的
py import copy  #写⼊表格⽤的
import sys
sys.path.append('../')
def read_data(file_path,i,j):  #从⽂件读数据 i从哪列开始取,j到哪列结束
my_file = xlrd.open_workbook(file_path)#打开表格
table=my_file.sheets()[0]#取到第⼀张sheet
rowcount = ws  #获得⾏数
colcount = ls  #获得列数
li =[]
for row in range(1,rowcount):  #遍历所有⾏
for col in range(i,j):      #遍历参数所在列,定位好⾏号列号以后,就可以取出参数了
li.ll(row,col).value)#把取出来得值存成list,只能取单个值,如果想取多个,可以多次调⽤
return(li)
#print (read_data('./saoma.xls',3,4))  #这是调⽤读表格,3,4表⽰第4列
def write_result(file_path,i,j,result):  #把返回值写⼊表格 i⾏号,j列号,result写⼊的值,file_path⽂件路径
my_file = xlrd.open_workbook(file_path)#打开⽂件
workbooknew = copy(my_file)#转换表格属性,⽬的是为了写⼊,类似于中间表,可以理解为先把数据存到⼀个位置,最后再把数据存⼊表格
table = _sheet(0)#获取第⼀张sheet
table.write(i,j,result)#写⼊的⾏,列,值
workbooknew.save(file_path)#把表格属性转化回来,把数据存⼊表格
#write_result('./saoma.xls',1,5,'pass')  这是写⼊表格,1表⽰第1⾏,5表⽰第5列
读表格是:read_data⽅法
写⼊表格是:write_result⽅法
读表格运⾏结果是:
写⼊表格的运⾏结果是:
4、数据应⽤
创建⼀个py⽂件,名称为api_test.py,这个⽂件是⽤例⽂件,在这⾥调⽤接⼝,使⽤表格⾥的参数,并把结果写回表格。
import requests
import json
import sys
sys.path.append('../')
import io #下边这句注释掉了,原因是,如果有这句会影响其他⼆进制⽂件对它的读取,会报io错误
#sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改变标准输出的默认编码
from case_data import *
class Test_Apicase(unittest.TestCase):
def setUp(self):
pass
def test_saoma_dt(self):
'''单条扫码'''
self.url ='*****/api/book/scan/search'#url
self.data_path ='./saoma.xls'#⽤例路径
self.d = read_data(self.data_path,3,4)#读取参数
print ('测试数据⽂件是:%s' % self.data_path)
for i in range(0,len(self.d)):    #循环调⽤接⼝,因为取出来的数据不⽌⼀条,也就是需要多次调⽤同⼀个接⼝  pc = pect[i]#把预期结果取出来⼀个
self.isbn = eval(self.d[i])#把参数取出来⼀个,转换成字典,直接当参数,也就是把{'isbn' : '1234'}直接当参数  s = (self.url,params=self.isbn)#调⽤接⼝,把上边⼀句取出来的参数传给接⼝
self.r = s.json()
python怎么读入excel
try:
self.assertEqual(de),pc)#监控断⾔是否正确,如果正确写⼊pass
except AssertionError as e:  #异常处理,如果监控的代码有问题,则执⾏这个,AssertionError表⽰断⾔失败    st_result ='failed'#如果断⾔不正确说明这条⽤例失败了,写failed
raise e  #⽤于抛出异常,否则⽤例失败了,但是批量运⾏⽤例时,显⽰通过,必须抛
finally:  #⽆论是否异常,都会执⾏下⾯得语句
write_result(self.data_path,i+1,st_result)#把pass和failed写⼊表格
write_result(self.data_path,i+1,6,str(self.r))#把返回值写⼊表格
def tearDown(self):
pass
if__name__=='__main__':
suite = unittest.TestSuite()
suite.addTest(Test_Apicase('test_saoma_dt'))
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite)
运⾏结果如下:
综上所述,就是做表格参数化的具体思路了,希望能够帮助到⼤家!
  如果对软件测试、接⼝测试、⾃动化测试、持续集成、⾯试经验。感兴趣可以进到806549072,内会有不定期的分享测试资料。还会有技术⼤⽜,业内同⾏⼀起交流技术

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。