1. 程式人生 > 實用技巧 >Python3+requests+unittest+log+excel+HTMLTestRunner+email框架介面自動化案例⑺——測試用例

Python3+requests+unittest+log+excel+HTMLTestRunner+email框架介面自動化案例⑺——測試用例

一、測試用例

1.testcaseF1.py:對應API_TestCase.xlsx中的F1資料

# _*_ coding:utf-8 _*_
import unittest,paramunittest,json
from  Common import configHttp,readExcel,readConfig,getheader,log

excel= readExcel.readExcel('API_TestCase.xlsx')                   #獲取excel檔案
names=excel.get_sheetnames()                                      #
獲取sheel testcase=excel.get_xlsx(names[0]) #獲取指定shell的case baseurl = readConfig.Read_Config().get_info('HTTP','baseurl') #獲取配置檔案的baseurl headers= getheader.host_headers() #獲取heders log_info =log.logger #
匯入log系統 @paramunittest.parametrized(*testcase) class testUserLogin(unittest.TestCase): def setParameters(self,NO,case_name, method,path, data,code): """ 從 excel 中獲取用例 :param NO: 用例序號 :param case_name: 用例名稱 :param method: HTTP方法 :param path: 路徑 :param data: 引數 :param code: 響應
""" self.case_name =NO self.case_name = str(case_name) self.method = str(method) self.path = baseurl+str(path) self.data = json.loads(data) #字串轉字典 self.code=code def setUp(self): #每個case執行前執行 log_info.info('---%s %s 測試開始---' % (names[0],self.case_name)) def testcaseF1(self): self._testMethodName = self.case_name #當前函式方法+測試用例測試函式名稱 #self._testMethodDoc= self.case_name #測試函式文件 info=configHttp.req(self.method,self.path,params=self.data) #呼叫http請求方法 #print(info.json()) #列印請求結果 if self.case_name in ['獲取裝置任務資訊']: self.assertEqual(info.status_code, self.code,('%s 斷言失敗' % self.case_name)) #斷言 else: self.assertEqual(info.json()['code'], self.code,('%s 斷言失敗' % self.case_name)) #斷言 def tearDown(self): #每個case執行後執行 log_info.info('---%s %s 測試結束---' % (names[0],self.case_name)) if __name__ == '__main__': suite = unittest.TestSuite() #建立測試套件物件 suite.addTest(unittest.makeSuite(testUserLogin)) #新增測試用例到套件中 runner = unittest.TextTestRunner() #使用TextTestRunner建立一個執行器 runner.run(suite) #執行用例

2.testcaseF2.py:對應API_TestCase.xlsx中的F2資料

# _*_ coding:utf-8 _*_
import unittest,paramunittest,json
from  Common import configHttp,readExcel,readConfig,getheader,log

excel= readExcel.readExcel('API_TestCase.xlsx')                   #獲取excel檔案
names=excel.get_sheetnames()                                      #獲取sheel
testcase=excel.get_xlsx(names[1])                                 #獲取指定shell的case
baseurl = readConfig.Read_Config().get_info('HTTP','baseurl')     #獲取配置檔案的baseurl
headers= getheader.host_headers()                                  #獲取heders
log_info =log.logger                                              #匯入log系統

@paramunittest.parametrized(*testcase)
class testUserLogin(unittest.TestCase):
    def setParameters(self,NO,case_name, method,path, data,code):
        """
        從 excel 中獲取用例
        :param NO: 用例序號
        :param case_name: 用例名稱
        :param method: HTTP方法
        :param path: 路徑
        :param data: 引數
        :param code: 響應
        """
        self.case_name =NO
        self.case_name = str(case_name)
        self.method = str(method)
        self.path = baseurl+str(path)
        self.data = json.loads(data)
        self.code=int(code)                              #字串轉字典型別

    def setUp(self):                                                   #每個case執行前執行
        log_info.info('---%s %s 測試開始---' % (names[1],self.case_name))

    def testcaseF2(self):
        self._testMethodName = self.case_name                           #當前函式方法+測試用例測試函式名稱
        #self._testMethodDoc= self.case_name                            #測試函式文件
        info=configHttp.req(self.method,self.path,json=self.data)#呼叫http請求方法
        #print(info.json())
        if self.case_name in ['建立裝置任務資訊']:
            self.assertEqual(info.status_code, self.code,('%s 斷言失敗' % self.case_name))#斷言
        else:
            self.assertEqual(info.json()['code'], self.code,('%s 斷言失敗' % self.case_name))#斷言

    def tearDown(self):                                 #每個case執行後執行
        log_info.info('---%s %s 測試結束---' % (names[1],self.case_name))

if __name__ == '__main__':
    suite = unittest.TestSuite()                        #建立測試套件物件
    suite.addTest(unittest.makeSuite(testUserLogin))    #新增測試用例到套件中
    runner = unittest.TextTestRunner()                  #使用TextTestRunner建立一個執行器
    runner.run(suite)                                   #執行用例

3.testcaseF3.py:對應API_TestCase.xlsx中的F3資料

# _*_ coding:utf-8 _*_
import unittest,paramunittest,json
from  Common import configHttp,readExcel,readConfig,getheader,getrandom,log

excel= readExcel.readExcel('API_TestCase.xlsx')                   #獲取excel檔案
names=excel.get_sheetnames()                                      #獲取sheel
testcase=excel.get_xlsx(names[2])                                 #獲取指定shell的case
baseurl = readConfig.Read_Config().get_info('HTTP','baseurl')     #獲取配置檔案的baseurl
headers= getheader.host_headers()                                  #獲取heders
log_info =log.logger                                              #匯入log系統

@paramunittest.parametrized(*testcase)
class testUserLogin(unittest.TestCase):
    def setParameters(self,NO,case_name, method,path, data,code):
        """
        從 excel 中獲取用例
        :param NO: 用例序號
        :param case_name: 用例名稱
        :param method: HTTP方法
        :param path: 路徑
        :param data: 引數
        :param code: 響應
        """
        self.case_name =NO
        self.case_name = str(case_name)
        self.method = str(method)
        self.path = baseurl+str(path)
        self.data = json.loads(data)
        self.code=int(code)                              #字串轉字典型別

    def setUp(self):                                                   #每個case執行前執行
        log_info.info('---%s %s 測試開始---' % (names[2],self.case_name))

    def testcaseF3(self):
        self._testMethodName = self.case_name                           #當前函式方法+測試用例測試函式名稱
        #self._testMethodDoc= self.case_name                            #測試函式文件
        if self.case_name in ['更新裝置名稱','deviceid不存在']:
            data = {}
            data['displayname'] = getrandom.randomstr()
            info = configHttp.req(self.method, self.path, json=data)#呼叫http請求方法
            #print(info.json())
            if self.case_name in ['更新裝置名稱']:
                self.assertEqual(info.status_code, self.code,('%s 斷言失敗' % self.case_name))#斷言
            else:
                self.assertEqual(info.json()['code'], self.code, ('%s 斷言失敗' % self.case_name))#斷言
        else:
            info = configHttp.req(self.method, self.path, json=self.data)
            #print(info.json())
            self.assertEqual(info.json()['code'], self.code,('%s 斷言失敗' % self.case_name))#斷言

    def tearDown(self):                                 #每個case執行後執行
        log_info.info('---%s %s 測試結束---' % (names[2],self.case_name))

if __name__ == '__main__':
    suite = unittest.TestSuite()                        #建立測試套件物件
    suite.addTest(unittest.makeSuite(testUserLogin))    #新增測試用例到套件中
    runner = unittest.TextTestRunner()                  #使用TextTestRunner建立一個執行器
    runner.run(suite)                                   #執行用例

4.testcaseF4.py:對應API_TestCase.xlsx中的F4資料

# _*_ coding:utf-8 _*_
import unittest,paramunittest,json,time
from  Common import configHttp,readExcel,readConfig,getheader,log

excel= readExcel.readExcel('API_TestCase.xlsx')                   #獲取excel檔案
names=excel.get_sheetnames()                                      #獲取sheel
testcase=excel.get_xlsx(names[3])                                 #獲取指定shell的case
baseurl = readConfig.Read_Config().get_info('HTTP','baseurl')     #獲取配置檔案的baseurl
headers= getheader.host_headers()                                  #獲取heders
log_info =log.logger                                              #匯入log系統

@paramunittest.parametrized(*testcase)
class testUserLogin(unittest.TestCase):
    def setParameters(self,NO,case_name, method,path, data,code):
        """
        從 excel 中獲取用例
        :param NO: 用例序號
        :param case_name: 用例名稱
        :param method: HTTP方法
        :param path: 路徑
        :param data: 引數
        :param code: 響應
        """
        self.case_name =NO
        self.case_name = str(case_name)
        self.method = str(method)
        self.path = baseurl+str(path)
        self.data = json.loads(data)
        self.code=int(code)                              #字串轉字典型別

    def setUp(self):                                                   #每個case執行前執行
        log_info.info('---%s %s 測試開始---' % (names[3],self.case_name))

    def testcaseF4(self):
        self._testMethodName = self.case_name                           #當前函式方法+測試用例測試函式名稱
        #self._testMethodDoc= self.case_name                            #測試函式文件
        if self.case_name in ['刪除裝置任務資訊']:
            create = excel.get_xlsx(names[1])[0]
            info_jobid = configHttp.req(create['method'],baseurl + create['path'],json=json.loads(create['data']))#呼叫http請求方法
            time.sleep(5)
            info = configHttp.req(self.method, self.path, json=info_jobid.json())#呼叫http請求方法
            #print(info.json())
            self.assertEqual(info.status_code, self.code,('%s 斷言失敗' % self.case_name))#斷言
        else:
            info = configHttp.req(self.method, self.path, json=self.data)
            #print(info.json())
            self.assertEqual(info.json()['code'], self.code,('%s 斷言失敗' % self.case_name))#斷言

    def tearDown(self):                                 #每個case執行後執行
        log_info.info('---%s %s 測試結束---' % (names[3],self.case_name))

if __name__ == '__main__':
    suite = unittest.TestSuite()                        #建立測試套件物件
    suite.addTest(unittest.makeSuite(testUserLogin))    #新增測試用例到套件中
    runner = unittest.TextTestRunner()                  #使用TextTestRunner建立一個執行器
    runner.run(suite)                                   #執行用例