接口自動化 之 unittest+ddt+openpyxl 綜合

 

前面寫過python 之 unittest初探 和 python 之 unittest+ddt 兩篇文章。在以前的文章中,寫過能夠再次優化。今天寫第三篇的目的,就是在原有基礎上,基於 openpyxl模塊再次優化。在第二篇中,注意到測試數據與代碼寫在一塊兒,實在是難以維護操做,而咱們平時書寫測試用例,記錄測試數據,一般會使用excel文件或者csv文件。所以,本篇主要使用openpyxl模塊對xlsx文件的操做,讀取或者寫入數據,作到測試數據與代碼分離。這樣子測試用例也很是便於維護。 基於書中的源碼,我作出了一些改動,能夠作到在必定格式下,徹底讀取excel文件的測試數據。本次優化,須要先定義一個DoExcel類,在裏面封裝2個方法,一個是讀取測試數據,另外一個是寫入數據。 廢話少說,直接上代碼:html

 1 #!/usr/bin/python3
 2 # -*- coding: utf-8 -*-
 3 # @Time :2018/12/11 13:13
 4 # @Author :Yosef
 5 # @Email :wurz529@foxmail.com
 6 # @File: :tryopenpyxl.py
 7 # @Software :PyCharm Community Edition
 8 import openpyxl  9 class DoExcel(): 10     def __init__(self, filename, sheetname): 11         self.filename = filename 12         self.sheetname = sheetname 13 
14     '''
15  讀取文件中的全部測試數據: 16     '''
17     def read_data(self): 18         wb = openpyxl.load_workbook(self.filename) 19         sh = wb[self.sheetname] 20         # print(wb.active)
21 
22         col_max = sh.max_column 23         testdata_key=[] 24         for i in range(1,col_max+1): 25             testdata_key.append(sh.cell(1, i).value) 26 
27         testdatas = [] 28         row_max = sh.max_row 29         for i in range(2, row_max+1): 30             testdata = {} 31             for j in range(1, row_max-1): 32                 testdata[testdata_key[j-1]] = sh.cell(i, j).value 33  testdatas.append(testdata) 34 
35         return testdatas 36 
37     '''
38  往文件中寫入數據 39  往文件中寫入數據須要三個參數,分別是row(行),col(列),以及value 40     '''
41     def write_data(self,row,col,value): 42         wb = openpyxl.load_workbook(self.filename) 43         ws = wb[self.sheetname] 44 
45         ws.cell(row,col).value = value 46  wb.save(self.filename) 47 
48 if __name__ == "__main__": 49     testdatas = DoExcel("hello.xlsx","data").read_data() 50     # print(testdatas)
51     for item in testdatas: 52         print(item) 53     DoExcel("hello.xlsx","data").write_data(10,10,"Test")

這個類寫好以後,咱們就能夠在昨天的代碼裏使用啦~在此以前,咱們先看一下excel文件內容:python

而後,在以前的代碼中稍做修改,將@data後面的具體測試數據換成咱們讀取的參數,而後再試一下。app

 1 import unittest  2 from ddt import ddt, data  3 import HTMLTestRunner  4 import time  5 from auto_test_interface.tryopenpyxl import DoExcel  6 
 7 testdatas = DoExcel("hello.xlsx","data").read_data()  8 
 9 @ddt # 表明這個測試類使用了數據驅動ddt
10 class TestCases(unittest.TestCase): 11 
12     def setUp(self): 13         print("*******************************") 14 
15     def tearDown(self): 16         print("\n") 17 
18     @data(*testdatas) 19     def test_testcases(self, value): 20         # print("這是一條測試用例case")
21         print(value) 22         try: 23 
24             print("test pass") 25         except Exception as e: 26             print("出錯啦,錯誤結果是%s" % e) 27             print("test failed") 28             raise e 29 
30 # if __name__ == "__main__":
31 # unittest.main()
32 
33 suite = unittest.TestSuite() 34 loader = unittest.TestLoader() 35 suite.addTest(loader.loadTestsFromTestCase(TestCases)) 36 
37 report_dir = "../Test report"
38 now = time.strftime("%Y-%m-%d %H-%M-%S") 39 reportname = report_dir + "/" + now + " Test report.html"
40 
41 with open(reportname, "wb+") as file: 42     runner = HTMLTestRunner.HTMLTestRunner(file, 2, title="Model test report", 43                                            description="Hello testers! This is the description of Model test"
44                                                        "report") 45     runner.run(suite)

運行代碼以後,咱們來看一下控制檯的輸出:測試

這是HTML的結果:優化

經過上圖能夠看到,在excel中的數據都已被取出。若是須要具體操做某一條數據,只須要從字典裏取值就行了!這裏的代碼都是爲了方便閱讀寫在了一塊兒,本身試的時候,記得按照項目結構來寫呀~若是有不足之處,歡迎各位大佬指正!ui

相關文章
相關標籤/搜索