unittest和request使用(断言,生成HTML测试报告)

Unittest介绍

1.Unittest组成部分

UnitTest是python的自动化测试框架,Unittest框架主要包含以下部分:

  • TestCase(测试用例)
  • TestSuite(测试套件,把多个TestCase集成到一个测试TestSuite)
  • TestRunner(执行测试用例)
  • TestLoader(自动从代码中加载多个测试用例TestCase)
  • Fixture(UnitTest特性)

(2)为什么使用Unitttest框架

  • 能够组织多个用例去执行
  • 提供丰富的断言方法
  • 能够生成测试报告(由于生成的测试报告简陋,我们选择其他插件实现)

 

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))

  

unittest和request使用(断言,生成HTML测试报告)

 

 

 如上图:批量添加一个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)

  

 如图:

unittest和request使用(断言,生成HTML测试报告)

 

 

第二步在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_test.html(单个添加)

yun_run_test2.html(批量添加)

如图:

unittest和request使用(断言,生成HTML测试报告)

 

unittest和request使用(断言,生成HTML测试报告)

上一篇:用html设置支付宝页面


下一篇:文件上传与下载