zoukankan      html  css  js  c++  java
  • web自动化测试实战之批量执行测试用例

    01实战之分离测试固件


    在UI 自动化测试中,不管编写哪个模块的测试用例,都需要首先在测试类中编写测试固件初始化WebDriver类及打开浏览器,执行登录,才能进行下一步业务逻辑的操作,测试用例执行完成后还需要关闭浏览器,这部分的代码如下:

    import unittest
    from selenium import webdriver
    import time, os
    
    class InitTest(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            #print('start!进入初始化环境')
            cls.dr = webdriver.Chrome()
            cls.dr.maximize_window()
            #print('测试浏览器为:{0}'.format(cls.dr.name))
            time.sleep(1)
            ulr1 = 'http://*******.****.com.cn'
    
        @classmethod
        def tearDownclass(cls):
            cls.dr.quit()
    

      

    在每一个测试类中都要编写以上代码,因此需要重复编写很多代码。是否可以把测试固件这部分代码分离出去,测试类直接继承分离出去的类呢?我们把测试固件分离到项目中,新建文件名称为 public_XF_login.py   类名为:InitTest

    import unittest
    from selenium import webdriver
    import time, os
    
    class InitTest(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            #print('start!进入初始化环境')
            cls.dr = webdriver.Chrome()
            cls.dr.maximize_window()
            #print('测试浏览器为:{0}'.format(cls.dr.name))
            time.sleep(1)
            ulr1 = 'http://********.com.cn'
            #(u'访问测试环境后台管理系统')
            cls.dr.get(ulr1)
            #print('测试地址为:{0}'.format(cls.dr.current_url))
            time.sleep(1)
            xpath = cls.dr.find_element_by_xpath
            #点击账号登录,输入用户名+密码
            xpath('//*[@id="app"]/div/div[2]/div[2]/div/div[1]/div').click()
            time.sleep(1)
            # 捕捉账号文本栏,进行输入账号
            xpath('//*[@id="app"]/div/div[2]/div[2]/div/form/div[1]/input').send_keys(u'********')
            time.sleep(1)
            # 捕捉密码文本栏,进行输入密码
            xpath('//*[@id="app"]/div/div[2]/div[2]/div/form/div[2]/input').send_keys(u'*******')
            time.sleep(1)
            #点击登录
            xpath('//*[@id="app"]/div/div[2]/div[2]/div/form/div[3]/input').click()
    
        @classmethod
        def tearDownclass(cls):
            cls.dr.quit()
    

      

    from test_python.public_XF_login import InitTest  在需要引用该类的文件先进行引用该类,测试类进行继承InitTest,继承后,在测试类中直接编写要执行的测试用例,例如(该2条case是小编实际项目的自动化代码,各位可以也拿)case001_验证登录是否成功,代码如下:

    # -*-coding=utf-*-
    import time
    import unittest
    from test_python.public_XF_login import InitTest
    
    
    class Admin(InitTest):
        def testCase_001(cls):
            '''验证用户是否登录成功'''
            cls.assertEqual('http://********.com.cn/#/', cls.dr.current_url)
            time.sleep(1)
            cls.dr.quit()
    
    if __name__ == '__main__':
        unittest.main(verbosity=2)
    

      

    from test_python.public_XF_login import InitTest  在需要引用该类的文件先进行引用该类,测试类进行继承 InitTest,继承后,在测试类中直接编写要执行的测试用例,例如case002_验证登录是否成功,代码如下:

    # coding=utf-8
    import time
    import unittest
    from test_python.public_XF_login import InitTest
    
    class Admin(InitTest):
        def testCase_002(cls):
            '''进入门店评分报表页面_验证门店查看明细功能'''
            xpath = cls.dr.find_element_by_xpath
            time.sleep(2)
            #进入门店评分报表页面
            xpath('/html/body/section/section/aside/ul/li[3]/span').click()
            time.sleep(1)
            #刷新门店评分报表页
            cls.dr.refresh()
            time.sleep(5)
            #点击列表第一页,第五行门店的查看按钮,进入评分信息详情'
            xpath('/html/body/section/section/section/main/div[2]/div/div/div[2]/div[2]/div[1]/div[3]/table/tbody/tr[5]/td[10]/div/button/span').click()
            #断言门店详情页面制定元素是否展示的为神秘访客 判断页面是否成功跳转到详情页
            text = xpath('/html/body/section/section/section/main/div[2]/div/div/div[2]/div[2]/div/div[1]/div[1]/p[1]').text
            cls.assertEqual(u'神秘顾客', text)
            time.sleep(1)
            cls.dr.quit()
            #Case_002执行完毕关闭浏览器
    
    
    if __name__ == '__main__':
        unittest.main(verbosity=2)
    

      

    注解:首先需要导入public_XF_login.py 模块中的InitTest类,测试类 Admin 继承InitTest类。这样执行测试类后,会先执行setUpClass方法,再执行具体的测试用例,最后执行 tearDownclass 方法。python 的类继承的方式解决了在每个测试类中都需要编写测试固件的问题。把测试固件分离出去后,即使后期测试地址发生变化,只需要修改public_XF_login.py 模块中InitTest类中的 url地址即可,而不需要在每个测试类修改测试地址,减少了编写重复性代码的开销。分离了测试固件,运行以上代码,对应的测试用例执行通过。

    02实战之批量执行测试用例

    在实际测试中,常常需要批量执行测试用例。例如,在testCase 包中有 case001_login.py 和 case002_Score_report.py 两个文件,下面批量执行这两个模块的测试用例。创建新文件  test_case_suite.py,在 test_case_suite.py文件中编写批量执行的代码,测试用例的代码跟上面文件中的一致,目录大概如下

    接着我们在创建 AllTest.py 我们来看看如何进行调用全部的测试用例,如下代码就可以实现

    #-*-coding=utf-8-*-
    import unittest
    import os
    
    def AllTest():
        '''获取所有的测试模块'''
        suite=unittest.TestLoader().discover(
            start_dir=os.path.dirname('F:\python3\python_code\test_case_suite'),
            pattern='case*.py',
            top_level_dir=None)
        return suite
    
    if __name__ == '__main__':
        unittest.TextTestRunner(verbosity=2).run(AllTest())
    

    注解:在以上代码中,批量获取测试模块用到的方法是 discover。discover方法有三个参数,第一个参数 start_dir是测试模块的路径,存放在testCase包中;第二个参数pattern用来获取testCase包中所有以test开头的模块文件,会获取到test_baidu.py和test_sina.py;第三个参数 top_level_dir 在调用的时候直接给默认值None。我们执行 AllTest.py 文件执行代码如下,这就是批量化执行case.

    后面我会在基于这集中测试方法上,补充一些可优化的点,最近工作比较繁忙,会抽空给大家分享好文,持续分享持续输出,希望本文对你们会有所帮助。本文参考Python自动化测试实战(作者:无涯),感谢前人的教程学学他人的知识点,一步一步变为自己的知识点,也可以从中衍生新的测试思想与方法。

  • 相关阅读:
    155. 最小栈
    160. 相交链表
    PAT 1057 Stack
    PAT 1026 Table Tennis
    PAT 1017 Queueing at Bank
    PAT 1014 Waiting in Line
    PAT 1029 Median
    PAT 1016 Phone Bills
    PAT 1010 Radix
    PAT 1122 Hamiltonian Cycle
  • 原文地址:https://www.cnblogs.com/cemaxueyuan/p/13065475.html
Copyright © 2011-2022 走看看