1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 基于python的界面自动化测试-基于python的接口自动化测试+ddt数据驱动

基于python的界面自动化测试-基于python的接口自动化测试+ddt数据驱动

时间:2018-10-23 11:41:31

相关推荐

基于python的界面自动化测试-基于python的接口自动化测试+ddt数据驱动

在测试接口时,一个接口会先写好测试用例,这个用例主要针对功能,传入参时考虑到各种场景,正常的,异常的,如:参数缺省,参数传一个六位数字写用例时考虑边界情况等。

一个接口设计用例时有可能会十几条到几十条都有可能,多个接口就有很多了,这时候我们可以考虑到自动化测试接口。

采用数据驱动方式,把数据写在excel表格中,代码做封装,用数据驱动测试,两部分相互独立。python中用ddt模块来做数据驱动,代码简单好维护,调试也方便。

自己写的框架,结构如下:

common:公共层,放读取表格数据,发送request请求,生成测试报告的.py文件

data:放excel数据

report:放测试报告

testcase:写测试用例

run_main.py:运行用例并生成测试报告

HTMLTestRunner.py文件是从网上下载的模板,可以直接使用。

readExcel.py读取表格数据,返回的是一个列表,里面的数据以字典格式存放,通过索引得到字典然后取字典的值

1 #! /usr/bin/env python

2 #-*- coding:utf-8 -*-

3

4 """

5 @version: 1.06 @author: fky7 @site:8 @software: PyCharm9 @file: readExcel.py10 @time: /3/24 9:3711 """

12 importxlrd13

14 classReadExcel():15 def readExcel(fileName,SheetName="Sheet1"):16 data =xlrd.open_workbook(fileName)17 table =data.sheet_by_name(SheetName)18

19 #获取总行数、总列数

20 nrows =table.nrows21 ncols =table.ncols22 if nrows > 1:23 #获取第一行的内容,列表格式

24 keys =table.row_values(0)25 #print(keys)

26

27 listApiData =[]28 #获取每一行的内容,列表格式

29 for col in range(1,nrows):30 values =table.row_values(col)31 #keys,values这两个列表一一对应来组合转换为字典

32 api_dict =dict(zip(keys, values))33 #print(api_dict)

34 listApiData.append(api_dict)35

36 returnlistApiData37 else:38 print("表格未填写数据")39 returnNone40

41 if __name__ == '__main__':42 s = ReadExcel.readExcel("E:\fukun_apitest\data\yoyo_apiTest.xlsx","Sheet1")43 print(s)

sendRequest.py中的文件,读取表格的数据作为request请求的参数:

#-*- coding:utf-8 -*-

"""@version: 1.0

@author: fky

@site:

@software: PyCharm

@file: sendRequests.py

@time: /3/24 11:40"""

from common.readExcel importReadExcelimportrequestsimportjsonclassSendRequests():defsendRequests(self,s,apiData):try:#从读取的表格中获取响应的参数作为传递

method = apiData["method"]

url= apiData["url"]if apiData["params"] == "":

par=Noneelse:

par= eval(apiData["params"])if apiData["headers"] == "":

h=Noneelse:

h= apiData["headers"]if apiData["body"] == "":

body_data=Noneelse:

body_data= eval(apiData["body"])

type= apiData["type"]

v=Falseif type == "json":

body=json.dumps(body_data)if type == "data":

body=body_dataelse:

body=body_data#发送请求

re = s.request(method=method,url=url,headers=h,params=par,data=body,verify=v)returnreexceptException as e:print(e)if __name__ == '__main__':

s=requests.session()

testData= ReadExcel.readExcel("apiTest.xlsx", "Sheet1")

response= SendRequests().sendRequests(s,testData[3])print(response.json())

用例部分(case_01_yoyo.py)

#! /usr/bin/env python#-*- coding:utf-8 -*-

"""@version: 1.0

@author: fky

@site:

@software: PyCharm

@file: case_01.py

@time: /3/16 10:58"""

importunittestimportrequestsfrom ddt importddt,data,unpackfrom common.sendRequests importSendRequestsfrom common.readExcel importReadExcelimportos#path = os.path.dirname(os.getcwd())+"\data\yoyo_apiTest.xlsx"#print(path)

testData = ReadExcel.readExcel("E:\fukun_apitest\data\yoyo_apiTest.xlsx", "Sheet1")

@ddtclassTest1(unittest.TestCase):defsetUp(self):

self.s=requests.session()deftearDown(self):pass@data(*testData)deftest_yoyo_api(self,data):

re=SendRequests().sendRequests(self.s, data)#print(re.json())

#切割字符串取后面的部分

expect_result1 = data["expect_result"].split(":")[1]#转换为字符串

expect_result =eval(expect_result1)#断言

self.assertEqual(re.json()["origin"], expect_result, "返回错误,实际结果是%s"%re.json()["origin"])if __name__ == '__main__':

unittest.main()

run_main.py,跑用例最后生成测试报告:

#! /usr/bin/env python#-*- coding:utf-8 -*-

"""@version: 1.0

@author: fky

@site:

@software: PyCharm

@file: run_main.py

@time: /3/16 10:58"""

importunittestimporttimeimportosfrom common.HTMLTestRunner_jpg importHTMLTestRunnerdef run_case(dir = "testcase"):

case_dir= os.getcwd() + "\" +dirprint(case_dir)

test_case=unittest.TestSuite()

discover= unittest.defaultTestLoader.discover(case_dir,pattern="case_01_yoyo.py",top_level_dir=None)returndiscoverif __name__ == '__main__':

current_time= time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))

report_path=os.getcwd() + "\report\" + current_time + '.html' #生成测试报告的路径

print(report_path)

fp= open(report_path, "wb")

runner= HTMLTestRunner(stream=fp, title=u"自动化测试报告", description=u'yoyo接口',verbosity=2)

runner.run(run_case())

fp.close()

报告结果

--------------------------------------------------------------------------------------------

更新于-12-16日下午18:03

不好意思好久没看微博,今天才看见有人提问了,所有重新检查了下项目文件

case_02_qq.py 这个用例经测试是可以成功执行的,各位网友可以自行到github下载或克隆使用:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。