python做一个考试系统_Python系统学习 - Unittest

Python从2.1开始将unittest内置为标准库,方便对程序进行测试、验证,我们对unittest进行学习:

本章的单元测试格式如下:新建一个单元测试的例子本章知识点如下:

1、该测试类需要继承unittest.TestCase

2、结构为:

a、setUp方法测试前准备工作

b、tearDown方法测试后收尾工作

c、测试用例,以test_add(),以test开头,实例化需要的测试类,测试对应函数,self.assertEqual(result, 8)断言测试结果

d、创建测试套件suite,unittest.TestSuite()

e、将测试用例添加到测试套件中,suite.addTest(TestCalculator("test_add"))

f、获取runner,这里用TextTestRunner,直接输出到控制台,unittest.TextTestRunner()

g、运行测试用例,runner.run(suite)

3、断言的几个方法:

assertEqual(a, b): a == b

assertNotEqual(a, b): a != b

assertTrue(x): bool(x) is True

assertFalse(x): bool(x) is False

assertIs(a, b): a is b

assertIsNot(a, b): a is not b

assertIsNone(x): x is None

assertIsNotNone(x): x is not None

assertIn(a, b): a in b

assertNotIn(a, b): a not in b

assertIsInstance(a, b): isinstance(a, b) 判断a是否是b的实例

assertNotIsInstance(a, b): not isinstance(a, b) 判断a是否不是b的实例

4、测试用例的规范设计:

项目中:test_case文件夹:

test_calculator.py

test_leapyear.py

calculator.py

leap_year.py

run_test.py

一个测试项目,需要一个test_case测试用例文件夹,里面存放测试用例,被测功能一般在外面,这里没有再做处理,

通过定义run_test.py,创建一个suit = unittest.defaultTestLoader.discover(test_dir, pattern),

该套件会主导在指定目录下查找测试用例,从而达到简便执行所有指定测试用例

(不同到功能测试用例存放在不同的py文件中,规范格式)

5、测试用例执行顺序:

unittest默认根据ASCII码的顺序加载测试用例的(数字与字母的顺序为0~9,A~Z,a~z),并不是按照测试用例的创建

顺序从上往下执行的

另外一种通过声明TestSuite类,addTest()方法按照一定顺序来加载测试用例也可以实现顺序自定义

6、执行多级目录的测试用例:

让unittest查找test_case目录下子目录中的测试文件,可以中每个子目录下放一个__init__.py文件,将一个目录标记成

一个标准的Python模块

7、跳过测试用例和预期失败:

(利用装饰器实现:在用例前添加@unittest.skip("直接跳过测试用例"))

a、无条件跳过测试用例:unittest.skip("直接跳过测试用例")

b、如果条件为真,则跳过该测试用例:unittest.skipIf(3 > 2, "当条件为真时跳过")

c、如果条件为真时,执行该测试用例:unittest.skipUnless(3 > 2, "条件为真时执行该测试用例")

d、直接将该测试用例标记为Fail:unittest.expectedFailure()

8、Fixture:

setUpModule()/tearDownModule():整个模块开始与结束时执行

setUpClass(cls)/tearDownClass(cls):测试类开始和结束时执行

(setUpClass(cls)/tearDownClass(cls),属于类方法,需要通过@classmethod进行装饰,cls和self没什么区别,都表示方法的第一个参数)

setUp(self)/tearDown(self):测试用例开始和结束时执行

9、编写简易自动化测试:

如test_baidu.py,注意其结构:

# coding = utf8

import os

os.path.abspath(".")

import unittest

from selenium import webdriver

from time import sleep

class TestBaidu(unittest.TestCase):

@classmethod

def setUpClass(cls):

cls.driver = webdriver.Chrome()

cls.base_url = "百度一下,你就知道"

# 根据不同内容搜索

def baidu_search(self, search_keys):

self.driver.get(self.base_url)

sleep(2)

self.driver.find_element_by_id("kw").send_keys(search_keys)

self.driver.find_element_by_id("su").click()

sleep(2)

def test_search_keys_selenium(self):

search_keys = "selenium"

self.baidu_search(search_keys)

self.assertEqual(self.driver.title, search_keys + "_百度搜索")

print(self.driver.title)

def test_search_keys_appium(self):

search_keys = "appium"

self.baidu_search(search_keys)

self.assertEqual(self.driver.title, search_keys + "_百度搜索")

@classmethod

def tearDownClass(cls):

cls.driver.quit()

接下来附上文件:unittest_sample​pan.baidu.com

通过run_test.py运行测试用例:

对所有的test规范格式的测试用例进行run,使用HTMLTestRunner整理获得测试报告,输出至网页中,每一条都清晰可见

run_test.py

# coding = utf8

import os

os.path.abspath(".")

import unittest

import HtmlTestRunner

test_dir = "./unittest_sample/test_case"

suit = unittest.defaultTestLoader.discover(test_dir, pattern = "test*.py")

runner = HtmlTestRunner.HTMLTestRunner("./unittest_sample/report/report.html")

runner.run(suit)下一章,我们对unittest进行一个扩展,当前就先到这里啦!

关注 + 收藏 + 点赞哦,谢谢啦~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值