(7)之前的文章已经把该需要的都封装好了,现在呢。我们就要来读取Excel文件了哦,按行读取就行。Python自带的paramunittest会自动识别用例的(#paramunittest是unittest实现参数化的一个专门的模块,可以传入多组参数,自动生成多个用例),好啦,我们开始看代码,读取Excel代码如下:readExcel.py
caselist.xlsx文档我的内容是这样的,当然你们可以按照自己测试的接口文档来更改,第一行的用例名(case_name),方法(method),接口路径(path)以及接口请求需要带的参数(data)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/11/8 16:25
# @Author :xx
# @Site :
# @File : test11.py
# @Software: PyCharm
#读取Excel的方法
import xlrd
import os
import json
import csv
from testFile import getpathInfo
#实例化路径,获取当前路径C:\Users\xxxxx\PycharmProjects\interfaceTest\testFile
path = getpathInfo.get_path()
class readExcel():
# xls_name填写用例的Excel名称 sheet_name该Excel的sheet名称
def get_xls(self,xls_name,sheet_name):#获取Excel数据
#定义存入接口用例
cls=[]
#获取用例的文件路径,C:\Users\xxxxx\PycharmProjects\interfaceTest\testFile/caselist.xlsx
xlspath = os.path.join(path,xls_name)
# print("xlspath值为:",xlspath)
file = xlrd.open_workbook(xlspath) #打开用例的excel
sheet = file.sheet_by_name(sheet_name)#获得打开Excel的sheet
nrows=sheet.nrows #获取sheet的行数
for i in range(nrows):#根据行数来循环获取Excel的数据并存入cls
if sheet.row_values(i)[0] != 'case_name': #如果cls中不存在case_name(用例),那么我们把这行的数据添加到cls[]中,row_values(i)[0]取值是第一列的case_name下的值
cls.append(sheet.row_values(i))
return cls
if __name__ == '__main__':#测试一下看看是否通过
x=readExcel()
print(x.get_xls("caselist.xlsx","Flash"))#输出sheet(Flash)表格中的内容
print(x.get_xls('caselist.xlsx', 'Flash')[0][1])#输出第0行第1个数据,列表从0开始的
(8)我们已经把Excel中的数据读取出来了,接下来我们就来运行case啦。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/11/8 16:25
# @Author : xxx
# @Site :
# @File : test11.py
# @Software: PyCharm
#读取caselist.xlsx中的用例,使用unittest来进行断言校验
#unittest断言测试case了
import json
import unittest
import paramunittest
from common import configHttp
# from testFile import get_token
from testFile import geturlParams
from testFile import readConfig
from testFile import readExcel
import urllib.parse
from testFile import get_token
#paramunittest是unittest实现参数化的一个专门的模块,可以传入多组参数,自动生成多个用例
# import paramunittest
from ddt import ddt,data,unpack
url = geturlParams.geturl_Now().get_url() #调用我们的geturlParams获取我们拼接的URL
get_token=get_token.get_token()#实例化获取登录凭证
print(url)
#读取Excel中的内容。获得列表数据,列表里的每一组就是一个用例
caselist_xls = readExcel.readExcel().get_xls('caselist.xlsx','Flash')
# print(caselist_xls)
#参数化获取的Excel数据
@paramunittest.parametrized(*caselist_xls) #列表里的每一组就是一个用例
class testFlash(unittest.TestCase):
def setParameters(self, case_name, method,path, data):
#初始化参数,参数位置也要与Excel对应哦
"""
set params
:param case_name:
:param path
:param data
:param method
:return:
"""
self.case_name = case_name
self.path = path
self.data= data
self.method=method
def description(self):
self.case_name
def setUp(self):
print(self.case_name+"测试开始前准备")
def tearDown(self):
print("测试结束,输出log完结\n\n")
def test01case(self):
self.checkResult()
def checkResult(self):#断言
"""
check test result
:return:
"""
new_url = url+ self.path
# print(new_url)
# print(self.method)
# print(self.data)
# print(self.get)
info = configHttp.Run_http().run_http(self.method, new_url, self.data,get_token)
# print(info)
ss=json.loads(info)## 将响应转换为json字典格式
if self.case_name is not None:
self.assertEqual(ss['msg'], "成功") # 返回的msg应该是成功就合法。也可以用code状态码判断
print(self.case_name + "接口请求执行成功")
else:
print(self.case_name + "接口请求执行失败")