【自动化测试学习笔记 selenium 三 】

目录

unittest框架解析

unittest各组件的关系 :

批量执行脚本

addTest() 的应用

makeSuite ()

TestLoader()

discover()的应用

用例执行顺序

忽略用例的执行

unittest断言

HTML报告生成


unittest框架解析

unittest是python的单元测试框架,直接提供了创建测试用例,测试套件以及批量执行的方案

直接进行 import unittest 就可以使用

作为单元测试的框架,unittest也是可以对程序最小模块的一种敏捷化测试。利用单元测试框架

创建一个类,该类继承unittest 的TestCase 这样可以把每个case看成是一个最小的单元,由测试容器

组织起来,到时候直接执行,同时引入测试报告。

unittest各组件的关系 :

 

test fixture : 
初始化和清理测试环境,比如创建临时的数据库,文件和目录
test case :
单元测试庸用例,TestCase 是编写单元测试用例最常用的类
test suite :
单元测试用例的集合,TestSuite 是最长用的类
test runner :
执行单元测试
test report :
生成测试报告
​
from selenium import webdriver
import unittest
import time
import os
from selenium.common.exceptions import NoAlertPresentException
from selenium.common.exceptions import NoSuchElementException
​
class testBaidu1(unittest.TestCase):
    def setUp(self):
        print("----setUp----")
        self.driver = webdriver.Chrome()
        self.url = "https://www.baidu.com/"
        self.driver.maximize_window()
        time.sleep(3)
        
        
        #测试用例
​
​
    def test_hao(self):
        driver = self.driver
        url = self.url
        driver.get(url)
        driver.find_element_by_link_text("hao123").click()
        time.sleep(4)
​
​
    def test_baidu(self):
        driver = self.driver
        url = self.url
        driver.get(url)
        #self.assertEqual("突如其来的假期_百度搜索")
​
        driver.find_element_by_id("kw").send_keys("突如其来的假期")
        driver.find_element_by_id("su").submit()
        time.sleep(4)
        print(driver.title)
        time.sleep(4)
        
        #test fixture  清除环境
        
    def tearDown(self):
        print("----tearDown----")
        self.driver.quit()
​
​
    if __name__ == "__main__" :
        unittest.main()

 if __name__ == "__main__" :
        unittest.main()
        #如果 name == main 则执行 main 方法
        #unittest是python自带的单元测试框架
        #unittest.main()运行开头为“test”的函数。
   
      #可以增加verbosity参数,例如unittest.main(verbosity=2)
#在主函数中,直接调用main() ,在main中加入verbosity=2 ,这样测试的结果就会显示的更加详细。
#这里的verbosity 是一个选项, 表示测试结果的信息复杂度,有三个值:
#0 ( 静默模式): 你只能获得总的测试用例数和总的结果比如总共100个失败,20 成功80
#1 ( 默认模式): 非常类似静默模式只是在每个成功的用例前面有个“ . ” 每个失败的用例前面有个“F”
#2 ( 详细模式): 测试结果会显示每个测试用例的所有相关的信息
       
        

       
      
tips:在代码编写的过程中发现自己的 unittest.TestCase 方法没办法调用出来
​
原因:
​
包或者文件夹的命名问题,将自己的包命名为 unitest 因此 Python就会调用自己命名的unitest包下的类,而不是Python自带的unittest 包,因此将名称改为 其他的非unittest 即可。
​
​

批量执行脚本

addTest() 的应用

当有多个或者几百个测试用例的时候这样就需要一个测试套件,把测试用例放在该容器中进行执行

unittest 模块中提供了 TestSuite 类来生成测试套件,使用该类的构造函数可以生成一个测试套件的实例,该类提供了addTset 来把每个测试用例加入到测试套件中去。把一个测试赛脚本中的某几个测试用例方法添加到测试套件中.

#addTest(脚本名称.类方法.方法名称)
 #addTest
    suite = unittest.TestSuite()
    suite.addTest(testbaidu1.Baidu1("test_hao"))
    suite.addTest(testbaidu1.Baidu1("test_hbaidu"))
    suite.addTest(testbaidu2.Baidu2("test_hao"))
    suite.addTest(testbaidu2.Baidu2("test_baidusearch"))
    return suite
​
​
​

makeSuite ()

把一个测试脚本中的所有的测试用例方法添加到测试套件

#addTest(unittest.makeSuite(脚本名称.类名称))
 suite = unittest.TestSuite()
    suite.addTest(unittest.makeSuite(testbaidu1.Baidu1))
    suite.addTest(unittest.makeSuite(testbaidu2.Baidu2))
    return suite

TestLoader()

#unittest.TestLoader().loadTestsFromTestCase(脚本名称.类名称)
#TestLoader
    suite1 = unittest.TestLoader().loadTestsFromTestCase(testbaidu1.Baidu1)
    suite2 = unittest.TestLoader().loadTestsFromTestCase(testbaidu2.Baidu2)
    suite = unittest.TestSuite([suite1, suite2])
    return suite

discover()的应用

#把一个文件中的所有以某种形式命名的测试脚本中的所有测试用方法添加到测试套件
#discover = unittest.defaultTestLoader.discover(具体文件夹(相对路径),pattern = 测#试脚本名称通配符,top_level_dir = None)
def createsuite() :
    discover = unittest.defaultTestLoader.discover("../test_unittest",pattern="testBaidu*.py",top_level_dir=None)
    print(discover)
    return discover

用例执行顺序

unittest 框架默认加载测试用例的顺序是根据 ASCII码表的顺序,数学与字母的顺序为:
0-9,A-Z,a-z。
所以, TestAdd 类会优先于TestBdd 类被发现, test_aaa() 方法会优先于test_ccc() 被执行。对于测试目录与测试文件来说, unittest 框架同样是按照这个规则来加载测试用例。

忽略用例的执行

@unittest.skip("skipping")

unittest断言

自动化测试脚本如何判断实际结果和预期结果是否一致
​
self.assertEqual(预期判断的结果,driver.title,msg="实际的结果与预期的结果不一致")
asserEqual(预期结果,实际结果,msg = "实际结果与预期的结果输入不一致的时候输出的信息")
​
​
​

HTML报告生成

import HTMLTestRunner
import os
import sys
import time
import unittest
​
def createsuite() :
    discover = unittest.defaultTestLoader.discover("../test_unittest",pattern="testBaidu*.py",top_level_dir=None)
    print(discover)
    return discover
​
if __name__ == "__main__" :
    curpath = sys.path[0]
    print(sys.path)
    print(sys.path[0])
    #创建文件夹,创建的这个文件夹可以干什么
    if not os.path.exists(curpath+'/resultreport') :
        os.makedirs(curpath+'/resultreport')
​
​
​
        #文件夹的命名不能让名称重复
    now = time.strftime("%Y-%m-%d-%H %M %S",time.localtime(time.time()))
    print(now)
    print(time.time())
    print(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)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值