1. 程式人生 > >記錄python接口自動化測試(第二目)

記錄python接口自動化測試(第二目)

com main port 例子 tro 返回結果 har ogr 方法封裝

在第一目裏寫了幾個簡單demo,並把調用get和post請求的方法封裝到了一個類裏,這次結合python自帶的unittest框架,用之前封裝的方法來寫一個接口測試demo

1.unittest簡單用法

# -*-coding:UTF:8-*-

import unittest


class TestMethod(unittest.TestCase):  # 定義一個類,繼承自unittest.TestCase
    # 每次執行用例前執行setUp(),可以在這裏做一些初始化的工作
    def setUp(self):
        print(setUp)

    # 每次執行用例後執行tearDown
def tearDown(self): print(tearDown) def test001(self): # unittest中的用例必須以test開頭 print(test001) def test002(self): print(test002) if __name__ == __main: unittest.main()

運行結果如下:
技術分享圖片

如果不想在每次執行用例時都執行一遍setUp()和tearDown(),只要執行一次就好,可以使用類方法代替:

# -*-coding:UTF:8-*-

import
unittest class TestMethod(unittest.TestCase): # 定義一個類,繼承自unittest.TestCase # 每次執行用例前執行setUp(),可以在這裏做一些初始化的工作 @classmethod def setUpClass(cls): print(setUp\n) # 每次執行用例後執行tearDown @classmethod def tearDownClass(cls): print(tearDown) def test001(self): #
unittest中的用例必須以test開頭 print(test001) def test002(self): print(test002) if __name__ == __main: unittest.main()

運行結果如下:
技術分享圖片

2.接口測試實例

# -*-coding:UTF:8-*-

import unittest
from interface.demo import RunMain   # 從之前封裝的文件中,引入RunMain類
import HTMLTestRunner
import json


class TestMethod(unittest.TestCase):    # 定義一個類,繼承自unittest.TestCase

    def setUp(self):
        self.run = RunMain()   # 在初始化方法中實例化一個對象,這樣就不需要在每個用例中再進行實例化了

    def test01(self):
        url = http://192.168.0.53:7001/CommonService/api/control/controlCust/query.v
        data = {
            controlSeq: 2018118325
        }
        r = self.run.run_main(url, POST, data)   # 調用RunMain類中run_main方法
        print(r)
        re = json.loads(r)
        self.assertEqual(re[status], 200, 測試失敗)
#註意我在進行斷言前,先用json庫的json.loads()函數對上一步中的返回結果r進行了解碼,不然直接調用r[‘status‘]時會報錯“json.loadsstring indices must be integers”
#原因是,在之前的例子中,為了使顯示效果更加直觀,對服務器的響應結果利用json.dumps()進行了json格式的編碼

def test02(self): url = http://192.168.0.53:7001/CommonService/api/control/controlProgress/query.v data = { "controlSeq": "2018118325" } r = self.run.run_main(url, GET, data) print(r) re = json.loads(r) self.assertEqual(re["status"], 200, 測試失敗) # @unittest.skip(‘test03‘) # 使用skip()方法表示跳過用例test03 def test03(self): url = http://192.168.0.53:7001/CommonService/api/control/expressInfo/add.v data = { controlSeq: 2018118361, seq: 2939, type: 1 } r = self.run.run_main(url, POST, data) print(r) # print(type(r)) # 查看返回對象r的類型 re = json.loads(r) # print(type(re)) self.assertEqual(re[status], 200, 測試失敗) if __name__ == "__main__": unittest.main() #表示執行全部用例

3.使用TestSuite()來自定義執行case

# -*-coding:UTF:8-*-

import unittest
from interface.demo import RunMain   # 從之前封裝的文件中,引入RunMain類
import HTMLTestRunner
import json


class TestMethod(unittest.TestCase):    # 定義一個類,繼承自unittest.TestCase

    def setUp(self):
        self.run = RunMain()   # 在初始化方法中實例化一個對象,這樣就不需要在每個用例中再進行實例化了

    def test01(self):
        url = http://192.168.0.53:7001/CommonService/api/control/controlCust/query.v
        data = {
            controlSeq: 2018118325
        }
        r = self.run.run_main(url, POST, data)   # 調用RunMain類中run_main方法
        print(r)
        re = json.loads(r)
        self.assertEqual(re[status], 200, 測試失敗)
        # globals()[‘userid‘] = 22   #定義全局變量

    def test02(self):
        # print(userid)   #使用case1中的全局變量,執行時需要全部執行,不能只執行後面的,不然會報錯
        url = http://192.168.0.53:7001/CommonService/api/control/controlProgress/query.v
        data = {
            "controlSeq": "2018118325"
        }
        r = self.run.run_main(url, GET, data)
        print(r)
        re = json.loads(r)
        self.assertEqual(re["status"], 200, 測試失敗)

    # @unittest.skip(‘test03‘)  # 跳過用例test03
    def test03(self):
        url = http://192.168.0.53:7001/CommonService/api/control/expressInfo/add.v
        data = {
            controlSeq: 2018118361,
            seq: 2939,
            type: 1
        }
        r = self.run.run_main(url, POST, data)
        print(r)
        # print(type(r)) # 查看返回對象r的類型
        re = json.loads(r)
        # print(type(re))  #查看json對象解碼後的類型
        self.assertEqual(re[status], 200, 測試失敗)


if __name__ == "__main__":    suite = unittest.TestSuite()   # 調用unittest的TestSuite(),理解為管理case的一個容器(測試套件)
    suite.addTest(TestMethod(test01))  # 向測試套件中添加用例,"TestMethod"是上面定義的類名,"test01"是用黎明
    suite.addTest(TestMethod(test02))
    suite.addTest(TestMethod(test03))
    runner = unittest.TextTestRunner()   # 執行套件中的用例
    runner.run(suite)

此時再執行這個文件,就只會執行添加到測試套件中的case了

但是如果是使用的pycharm來運行腳本,則有幾點需要註意,pycharm這裏有個坑,困擾了我很久,在第三目中的小總結中說一下

記錄python接口自動化測試(第二目)