软件测试工具(三)Unittest测试框架简单介绍


unittest 是python 的单元测试框架。作为单元测试的框架, unittest 也是可以对程序最小模块的一种敏捷化的测试。
JUnit4 是一个Java语言的单元测试框架。JUnit是一套框架,继承TestCase类,就可以用JUnit进行自动测试了。JUnit测试是程序员测试,即白盒测试。

1.Unittest 测试固件

 def setUp(self):  
        self.driver = webdriver.Chrome()
        self.url = "http://www.baidu.com"
 def tearDown(self):   
        self.driver.quit()

setUp(): 初始化 tearDown(): 清理工作

2.TestCase

tset_ 运行这个类的时候会默认执行
测试用例,必须以test_ 开头

def test_baidu1(self):
def test_baidu2(self):

3.测试套件

一个测试容器( 测试套件) ,把测试用例放在该容器中进行执行
unittest 模块中提供了TestSuite 类来生成测试套件,使用该类的构造函数可以生成一个测试套件的实例,该类提供了addTest来把每个测试用例加入到测试套件中

#手工添加案例到套件
def createSuite():
    suite = unittest.TestSuite()
#将测试用例加入到测试容器(套件)中
    # addTest
    # suite.addTest(demo.test("test_baidu1"))
    # suite.addTest(demo.test("test_baidu2"))
    # suite.addTest(demo1.test1("test_baidu1"))
    # suite.addTest(demo1.test1("test_baidu2"))
     # makeSuite
    # suite.addTest(unittest.makeSuite(demo.test))
    # suite.addTest(unittest.makeSuite(demo1.test1))
    # TestLoader
    suite1 = unittest.TestLoader().loadTestsFromTestCase(demo.test)
    suite2 = unittest.TestLoader().loadTestsFromTestCase(demo1.test1)
    suite = unittest.TestSuite([suite1,suite2])
    return suite
    # discover
    # discover = unittest.defaultTestLoader.discover('../ly0516',pattern='demo*.py',top_level_dir=None)
    # return discover

addTest() 可以一次存放一个测试用例脚本里一个类的一个方法,提供方法名
makeSuite() 可以实现把测试用例类内所有的测试case组成的测试套件,调用makeSuite的时候,只需要把测试类名称传入即可。可以一次存放一个测试用例脚本里一个类的所有方法。
TestLoader()用于创建类和模块的测试套件,和makeSuite一样。区别在于TestLoader会先放在一个个小套件,在整合起来。
discover() 可以把指定文件夹下所有特定格式命名的测试脚本中类的所有以test_开头的方法都放入套件中。discover 参数分别为
discover(dir,pattern,top_level_dir=None)

4.执行测试

if __name__=="__main__":    #执行用例
    suite = createSuite()
    runner = unittest.TextTestRunner(verbosity=1)
    runner.run(suite)

5.用例的执行顺序

unittest 框架默认加载测试用例的顺序是根据ASCII 码的顺序,数字与字母的顺序为: 0-9;A-Z;a-z
忽略用例执行,加一个标签@unittest.skip(“skipping”)

6.Unittest断言

自动化的测试中,对于每个单独的case来说,一个case的执行结果中, 必然会有期望结果与实际结果, 来判断该case是通过还是失败。unittest 的单元测试库提供了标准的xUnit 断言方法。
在这里插入图片描述

7.HTML报告的生成

脚本执行完毕之后,还需要看到HTML报告

# 获取当前脚本所在的路径
    curpath = sys.path[0]
    print(curpath)
    if not os.path.exists(curpath+"/resultReport"):
        os.mkdirs(curpath+"/resultReport")
    now = time.strftime("%Y-%m-%d-%H %M %S",time.localtime(time.time()))
    filename = curpath+"/resultReport/"+now+"-"+"resultReport.html"
    with open(filename,'wb') as fp:
        runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title=u"测试报告",
                                               description=u"用例执行",verbosity=2)
        suite = createSuite()
        runner.run(suite)

8.异常捕捉与错误截图

用例不可能每一次运行都成功,肯定运行时候有不成功的时候。如果可以捕捉到错误,并且把错误截图保存,这将会给我们错误定位带来方便。

# 错误截图
        self.driver.get_screenshot_as_file('./errorImage/'+now+"-"+name)

9.数据驱动

假设需要多次执行一个案例,比如baidu搜索,分别输入中文、英文、数字等进行搜索,这时候需要编写3个案例吗?有没有一次运行?
答:python 的unittest 没有自带数据驱动功能。所以如果使用unittest,同时又想使用数据驱动,那么就可以使用DDT(数据驱动测试)来完成。
参考文档:https://ddt.readthedocs.io/en/latest/

@ddt      #增加ddt数据
 # @data("杨紫", "王一博", "腾讯新闻", "阿里巴巴")
    # @file_data('test_baidu_data.json')
    @unpack
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值