1. 程式人生 > 其它 >unittest和request使用(斷言,生成HTML測試報告)

unittest和request使用(斷言,生成HTML測試報告)

unittest初級

import unittest


def my_sum(a, b):
a += 1
b += 2
return a + b


class TestSum(unittest.TestCase):
def test_01(self):
print(my_sum(2, 1))


def test_02(self):
print(my_sum(-1, 1))


def test_03(self):
print(my_sum(0, 1))


def test_04(self):
print(my_sum(1, -4))


# 將測試用例新增到套件裡
# 生成套件物件
suite = unittest.TestSuite()

# 一一新增測試用例到測試套件裡
suite.addTest(TestSum("test_01"))
suite.addTest(TestSum("test_02"))

# 執行suite物件中的用例
runner = unittest.TextTestRunner()
runner.run(suite)

import time

if __name__ == '__main__':
time.sleep(3)
TestSum()

  

(二)高階

import unittest

from request_test.test04 import TestSum1
from request_test.test04 import TestSum2


def my(a, b):
    a += 1
    b += 2
    return a + b



# 首先生成測試用例
class TestSum(unittest.TestCase):
    def test01(self):
        number=(my(2, 1))
        self.assertEqual(number,6)

    def test02(self):
        number=(my(-1, 1))
        self.assertEqual(number, 3)

    def test03(self):
        number=(my(0, 1))
        self.assertEqual(number, 4)

    def test04(self):
        number=(my(1, -4))
        self.assertEqual(number, 0)


# 將測試用例新增到套件裡
# 生成套件物件
suite = unittest.TestSuite()

# 一一新增測試用例到測試套件裡
suite.addTest(TestSum("test01"))
suite.addTest(TestSum("test02"))
suite.addTest(TestSum("test03"))
suite.addTest(TestSum("test04"))

# 一次行新增一個類裡面的所有的用例
# suite.addTest(unittest.makeSuite(TestSum1))
# suite.addTest(unittest.makeSuite(TestSum2))


# 批量新增一個py檔案裡面所有的用例
# suite = unittest.TestLoader().discover('./','test04.py')


# 執行suite物件中的用例
runner = unittest.TextTestRunner()
runner.run(suite)

  

如圖:# 一次行新增一個類裡面的所有的用例

# suite.addTest(unittest.makeSuite(TestSum1))
# suite.addTest(unittest.makeSuite(TestSum2))

  

如上圖:批量新增一個py檔案裡面所有的用例

# suite = unittest.TestLoader().discover('./','test04.py')

  

(三)request和unittest自動化校驗

首先建立一個yun.test.py和yun_run.py檔案

yun.test.py中有兩種不同的新增資料方法

import json, unittest, parameterized, requests


def yun_login(username, password):
    # 請求的url
    url = "http://yun.zenm.vip/iot/account/login/"
    data = {
        "username": username,
        "password": password,
    }

    json_data = json.dumps(data)
    header = {
        'Content-Type': 'application/json'
    }

    res = requests.post(url=url, data=json_data, headers=header)
    json_data = res.json()
    return json_data


# 為當前的介面寫測試用例
class Yun_test(unittest.TestCase):
    def test_01(self):
        # 準備請求的資料和斷言資料
        username = 'NestleWMS'
        password = 'NestleWMS'
        code = 200

        # 獲取requests請求以後的json資料
        json_data = yun_login(username, password)
        self.assertEqual(int(json_data["result"]), code)

    # 錯誤的使用者名稱
    def test_02(self):
        # 準備請求的資料和斷言資料
        username = 'NestleWMS1'
        password = 'NestleWMS'
        code = 5

        # 獲取requests請求以後的json資料
        json_data = yun_login(username, password)
        self.assertEqual(int(json_data["result"]), code)

    # 錯誤的密碼
    def test_03(self):
        # 準備請求的資料和斷言資料
        username = 'NestleWMS'
        password = 'NestleWMS2'
        code = 4

        # 獲取requests請求以後的json資料
        json_data = yun_login(username, password)
        self.assertEqual(int(json_data["result"]), code)


#批量測
# class Yun_test2(unittest.TestCase):
# @parameterized.parameterized.expand(
# [('NestleWMS', 'NestleWMS', 200), ('NestleWMS1', 'NestleWMS', 5), ('NestleWMS', 'NestleWMS2', 4)])
# def test04(self, username, password, code):
# # 獲取requests請求以後的json資料
# json_data = yun_login(username, password, code)
# self.assertEqual(int(json_data["result"]), code)

  

如圖:

第二步在yun_run.py中寫入以下程式碼

import unittest
from request_test.HTMLTestRunner import HTMLTestRunner
from request_test.yun_test import Yun_test
from request_test.yun_test import Yun_test2


# 載入到case套件裡
suite = unittest.TestSuite()
# suite.addTest(unittest.makeSuite(Yun_test))
suite.addTest(unittest.makeSuite(Yun_test2))


# 執行套件,生成測試報告
f = open('yun_run_test2.html', 'wb')
runner = HTMLTestRunner(stream=f, title='雲系統登入測試報告', description='Chrome 瀏覽器')
runner.run(suite)
f.close()

  

隨後生成雲系統登入測試報告

yun_run_test2.html(單個新增)

yun_run_test2.html(批量新增)

如圖: