• 多测师讲解课堂(012) _ Unittest框架(006)_高级讲师肖sir(unittest)



    Unittest
    一、用例设计规则
    1.unittest
    (1)测试类必须继承unittest.TestCase
    (2)测试函数必须以"test_"开头
    (3)测试类必须有unittest.main()方法


    1.unittest前置和后置
    (1)通过setup每个用例执行前执行,teardown每个用例执行后执行
    (2)通过setupclass类里面所有用例执行前执行,teardownclass类里面所有用例执行后执行

    生成报告方式
        1.unittest
    通过HTMLTestRunner生成

    一、unittst框架的作用
    当我们写的用例越来越多时,我们就需要考虑用例编写的规范与组织,以便于后期的维护,而unittest正是这样一款工具


    二、unittest是Python自带的标准库中的模块,其中包括:
    1、TestCase类
    2、TestSuite类
    3、TestLoader类
    4、TextTestRunner类
    5、TextTestResult类
    6、TestFixture类

    解释下:
    TestCase: 
    一个Testcase的实例就是一个测试用例,测试用例就是一个完整的测试流程,包括初始化setUp、运行run、测试后的还原tearDown
    TestSuite: 
    对一个功能的测试往往需要多测试用例的,可以把多的测试用例集合在一起执行,这就是TestSuite的概念。
    常用addTest()方法将一个测试用例添加到测试套件中
    TextTestRunner: 
    是用来执行测试用例的,其中的run(test)用来执行TestSuite/TestCase。测试的结果会保存在TextTestResult实例中
    TestFixture: 
    测试准备前要做的工作和测试执行完后要做的工作.包括setUp()和tearDown()。通过覆盖TestCase的setUp和tearDown来实现。
    TestLoader:
    是用来搜索所有以test开头的测试用例,然后将其加入到testsuite中

    如何分析是前段还是后端的问题
    (1)检查接口,前端和后台之间是通过接口文件相互联系的,需要查看接口文件
    (2)检查请求的数据是什么,反馈的数据又是什么
    (3)根据接口文件,检查数据是否正确。如果发送的数据是正确的,但是后台反馈的数据是不符合需求的,那就是后台的问题;如果前端没有请求接口或请求的时候发送数据与需求不符,那这个时候就是前端的问题了。
    (先抓包看请求报文,对着接口文档,看请求报文有没问题,有问题就是前端发的数据不对
    请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题)


    那我给你讲下我上个项目的自动化开展过程吧,我上个项目是叫掌中财富,是一个借贷平台。
    我们主要是对我要出借、我要借款、我的账户等模块进行了自动化测试。
    我们公司采用的是Python结合selenium进行自动化测试的,使用的是unittest框架。
    那为了方便后期对用例的管理和维护,我会进行模块的分层处理。
    主要分为:公共模块(主要是写入一些经常要用到的函数,比如登录)、数据模块、报告模块、执行用例的模块以及编写用例模块
    。那接下来我就以“我要出借”流程为例跟你讲解一下吧
    首先要导入对应的库,from selenium import webdriver和import unittest,
    分别导入selenium库和unittest库,然后新建一个继承unittest.testcase类的我要出借的类,
    我一般会把需要的前置条件在setup结构中编写,像webdrvier.chrome()选择谷歌浏览器,
    然后用dr.get方式获取网址打开,为了避免页面元素被遮挡定位不到而报错的现象,
    我会用maximize_window将浏览器最大化处理。因为有时候用例执行太快,而网页加载太慢会导致报错
    ,所以我一般都会用implicitly_wait进行智能等待,确保页面加载完成后再执行下一步。
    那在进行我要出借之前,需要先进行登录,因为之前我已经将登录写到公共模块了,
    所以我这边直接调用就可以了。登录成功后,进入首页会弹出一个存管账户,
    它是一个iframe弹框,我们可以直接叉掉他,或者进行注册,因为后续要进行出借的功能,
    必须要开通第三方存管账户才能完成。所以首先我们用switch_to_frame进入弹框,
    然后用id定位,并用send_keys编写里面的内容,最后用switch_to_default_content退出iframe弹框完成注册。
    之后的话是进行‘我要出借’,我要出借是一个隐藏列表,所以要先导入对应的模块,
    from selenium.webdriver.common.action_chains import ActionChains,
    用find_element_by_id的方式定位我要出借,然后用actionchains(dr).move_to_element().perform把鼠标移动到隐藏列表中,
    最后用xpath定位选择我要出借里面的一个标的。就以新手标为例,
    进入到新手标页面之后,里面有很多出借的项目,
    那我们可以用find_element_by_name点击其中一个具体的项目进行出借。
    因为这里新开了一个的窗口,所以需要用到dr.switch_to_window去切换窗口才能进行下一步。
    切换窗口的话有两种方式,一种是通过句柄切换,一种是通过索引切换,
    我一般用索引切换窗口比较多也比较方便。这时候为了保证用例执行的准确性,
    我会进行断言,首先dr.title获取title信息,之后用if语句来判断获取到的title信息是否与实际的相符,
    如果不一致输出原因,并用dr.get_screenshot_as_file('e:\bieyao\error.png')进行截图。
    一致的话则执行下一步操作。然后用id定位方式出借金额,为了提高效率,我是之前已经写好了随机生成金额的关键字
    ,所以我这边直接调用就可以了。最后用link_test定位点击立即出借就完成了整个出借的过程。
    在还原环境teardown的时候用dr.quit()将浏览器关闭,进行扫尾工作。
    最后就是在执行模块执行用例并生成测试报告,首先需要导入生成报告所需的模块HTMLTestRunnerCN
    ,用unittest.defaultTestLoader.discover(test_dir,pattern='kj2.py')方法把当前文件所有test开头的用例集合在一起
    ,然后定义好报告的保存路径,用HTMLTestRunnerCN.HTMLTestRunner把steam、title(报告标题)、description(用例执行详情)、
    tester(测试人员)等进行编写,最后用run的方法运行,执行完成之后可以在你保存的路径下,
    找到生成的报告进行总结分析。以上就是我大概的一个自动化开展过程

  • 相关阅读:
    使用 console.time() 计算js代码执行时间
    javascript 如何创建只能执行一次的事件。
    Javascript 的addEventListener()及attachEvent()对比
    使用jasmine-node 进行NodeJs单元测试 环境搭建
    Karma和Jasmine 自动化单元测试环境搭建
    3487. 【NOIP2013模拟联考11】剑与魔法(dragons) (Standard IO)
    3470. 【NOIP2013模拟联考8】最短路(path) (Standard IO)
    2018洛谷8月月赛第一题_U28036 Nagisa loves Tomoya
    NOIP2017提高组Day2第一题
    3464. 【NOIP2013模拟联考6】秀姿势(sugata) (Standard IO)
  • 原文地址:https://www.cnblogs.com/xiaolehua/p/14075520.html
Copyright © 2020-2023  润新知