专栏首页猪圈子web自动化测试实战之批量执行测试用例

web自动化测试实战之批量执行测试用例

本文参考Python自动化测试实战(作者:无涯)+网上教程+小编实战操练,感谢前人的教程学学他人的知识点,一步一步变为自己的知识点,也可以从中衍生新的测试思想与方法.

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.

后面我会在基于这集中测试方法上,补充一些可优化的点,最近工作比较繁忙,会抽空给大家分享好文,持续分享持续输出,希望本文对你们会有所帮助,也欢迎大家支持小编,进行分享,广而告之.

本文分享自微信公众号 - 猪圈子(Tester-sc),作者:石超

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 自动化测试用例管理执行方法之测试套件

    本文来自Python自动化测试实战(作者:无涯)学习衍生,学学他人的知识点,一步一步变为自己的知识点,也可以从中衍生新的测试思想与方法.

    测试小兵
  • Python+selenium+unittest+HTMLTestReportCN单元测试框架分享

    unittest是Python语言的单元测试框架,在Python的官方文档中,对unittest单元测试框架进行了详细的介绍,感兴趣的读者可以到 https:/...

    测试小兵
  • Selenium实际应用注入并执行Javascript语句

    Python通常结合selenium模块来完成一些web的自动化测试以及RPA(Robotic Process Automation)工作

    测试小兵
  • 乐视网面试真题,非一般的题目

    正文 HTML5学堂:这是一套2014年7月份乐视网的一份面试真题,虽然面试题目还算比较简单,但也很能反应面试者基础知识的掌握程度,特别是面试者对细节方面的处理...

    HTML5学堂
  • css position:static 的使用

    relative(相对定位) 对象不可层叠、不脱离文档流,参考自身静态位置通过top,bottom,left,right定位,并且可以通过z-index进行层次...

    tianyawhl
  • iview 下拉刷新loadTop报错解决

    蓓蕾心晴
  • 基于vue2.0+vuex+localStorage开发的本地记事本

    本项目是使用vue-cli脚手架生成的项目,项目代码可以到我的github上clone下来。clone下来之后可进入文件目录

    IMWeb前端团队
  • 基于vue2.0+vuex+localStorage开发的本地记事本

    本文采用vue2.0+vuex+localStorage+sass+webpack,实现一个本地存储的记事本。兼容PC端和移动端。 在线预览地址:DEMO 功能...

    IMWeb前端团队
  • 搜索框自适应大小 原

    (adsbygoogle = window.adsbygoogle || []).push({});

    tianyawhl
  • Django之ModelForm

      在前面有篇博客,我写了一个叫forms组件的东西,可以帮助我们完成校验数据、渲染标签功能和在前端页面局部刷新功能,功能封装的已经很好了,当时已经很开心了。但...

    py3study

扫码关注云+社区

领取腾讯云代金券