一、什么是框架 框架其实是开发大佬定制研发的应用骨架,是一个半成品,它对基础的代码进行了封装并且提供一个API接口。其他开发者只需要直接调用封装好的API即可。可以省去很多代码编写,从而提高工作效率。 二、什么是自动化框架以及他的作用 (1)自动化框架 自动化测试leader为了对一个系统做自动化测试二封装的一个代码主骨架,其它的自动化工程师只需要去调用骨架的里面的方法就可以实施自动化测试, 这个代码骨架叫做自动化框架 (2)自动化框架的作用 1.提高测试效率,降低维护成本 2.减少人工干预脚本因素 3.增加代码的可重复率 (3)unittest单元测试框架和自动化测试框架的关系 单元测试:指的是针对我们程序的最小的单元(方法)进行测试 unitest是它自动化框架的重要组成部分之一 pom自动化框架的重要组成之一 ddt数据驱动:自动化框架的重要组成部分之一 全局配置文件的封装:自动化框架的重要的组成部分之一 selenuim二次封装:自动化框架的重要组成部分之一 日志监控:自动化框架的重要组成部分之一 断言,邮件发送 三、单元测试框架对比 基于python语言:unittest和pytest 基于java语言:junit和testing 1.用例编写规则 unittest:提供testcase测试用例、testsuites测试套件、testfixtures测试固件或夹具、testloader测试加载器,testrunner测试运行器 (1)测试文件必须先导入 import unittest (2)测试类必须继承unittest.TestCase (3)测试方法必须以set开头 pytest:它是python的第三方测试框架,基于unittest的扩展框架,必须遵守以下规则 (1)测试文件名必须以test_开头或者是_test结尾 (2)测试类命令必须以Test开头 (3)测试方法必须以test开头 2.用例的前置和后置 unittest: setUp/tearDown 在每个用例之前或者之后与运行一次 打开浏览器,加载网页/关闭网页 setUpClass和tearDownClass 在每个类运行之前或者之后运行一次 创建数据库连接,创建日志对象/关闭数据库连接,销毁日志对象 setUpModule和tearDownModule 在每个模块之前和之后执行一次 pytest 方法级: setup_mothod/teardown_mothod 在方法之前和之后 setup/teardown 函数级: setup_funtion/teardown_funtion 在函数之前和之后 类级 setup_class/teardown_clss 模块: setup_module/teardown_module 还有:还可以在函数之前加@pytest.fixture() 3.断言 unitest:assertTrue,assertEqual,assertIn pytest:assert 4.报告 unittest:htmltestrunner pytest:插件:pytest-HTML,allure 5.失败重跑 unittest:没有 pytest:pytest-rerunfailures插件 6.数据驱动 unitest:ddt pytest:@pytest.mark.paramertrize 装饰器 7.用例分类执行 unitest:默认执行所有,也可以通过testsuite来执行部分用例,或者-K参数 pytest:@pytest.mark 四、unittest框架主要做了什么 1.测试发现:从多个py文件中收集并且加载测试用例 2.测试执行:将测试用例按照一定的顺序和条件去执行并且生成结果 3.测试判断:通过断言去判断结果是否正确 4.测试报告:统计测试进度,通过率,生成报告 五、Unittest重要组件 1.TestCase 2.TestSuite 3.TestFixture 4.TestLoader 5.TestRunner 六、TestCase用法 import unittest class EcshopLogin(unittest.TestCase): # 测试用例 def test01_baili(self): print("就俺家") 1.使用unittest命令行的提示 python -m unittest -v ecshop_login.EcshopLogin python -m 以脚本的方式去运行一个模块 unittest -v -verbose 意思就是更详细的输出结果 ecshop_login.EcshopLogin 模块名.类名.方法名 -k匹配模式: 1.通配符:-k *_weiwei 2.字符串:-l weiwei 集成Jenkins的时候使用。所有的命令行的方式都加非GUI的方式 postman:非GUI,newman jmeter:jmeter的命令 2.使用unittest.main() 配置pycharm的环境或者使用python模块.py 七、读懂执行的结果 . 成功 F 失败 E 错误 S 跳过 八、用例执行顺序 按照ASCII码的规则:【0-9 A-Z a-z】 A=65 a=97 九、框架底层原理 module=‘———main———’测试用例所在的路径__main__表示当前模块 defaultTest=None 待测试用例的名称,默认是所有 argv=None 接受外部的参数 testRunner=None 测试运行器,TextTestRunnner testLoader=loader.defaultTestLoader 指定使用默认的测试用例加载器 exit=True 是否在测试完成之后结果python程序 verbosity=1 · 类似于命令行-v 0,1,2 只运行部分用例使用testsuite if__name__=='__main__': suite=unittest.TestSuite() suite.addTest(EschopLogin("test01_baili")) suite.addTest(EschopLogin("test03_weiwei")) unittest main(defaultTest='suite') if __name__ == '__main__': suite=unittest.TestSuite() testcases=[EcshopLogin("test01_baili"),EcshopLogin("test11_zhili")] suite.addTest(testcases) unittest.main(defaultTest='suite') if __name__ == '__main__': suite=unittest.TestSuite() testcases=unittest.defaultTestLoader.discover(start_dir=os.getcwd(),pattern='test*.py') suite.addTest(testcases) unittest.main(defaultTest='suite') 一、TestFixture测试夹具,或者测试固件 二、忽略测试用例 三、unittest单元框架中的断言 assertEqual(a,b)断言a=b assertNotEqual(a,b)断言a!=b assertTrue(a)断言a为真 assertFalse(a)断言a为假 assertln(a,b)断言a在b里面 assertNotin(a,b)断言a不在b里面 四、批量执行用例生成HTML格式的报告 HTMLTestRunner.py C:\python373\lib 五、发送邮件 六、DDT、DDT底层 七、jenkins持续集成