web自动化测试第18步:单元测试框架unittest

在了解了ui自动化的方法后,实际应用时需要按照测试用例的形式来书写,否则执行起来太过冗余,这里引入一个测试框架:unittest,使用这个框架中编写用例,会更方便管理和运行。

一、unitest基础写法格式

1.1引用导入

import unittest

并且需要新建一个类,继承unittest

class Demo(unittest.TestCase):

1.2格式代码示例

备注:

1.用例的方法名中,要以test开头才能被读取出来

2.用例的读取顺序按照方法名的ASCII码顺序运行,顺序:0-9,A-Z,a-z

# -*- coding:utf-8 -*-
import unittest

class Demo(unittest.TestCase):

    def setUp(self):
        print("测试开始")

    def test_01(self):
        print("第一条用例")

    def tearDown(self):
        print("测试结束")

if __name__ == '__main__':
    unittest.main()

 

二、常用方法、装饰器详解

2.1 unittest中常用方法、装饰器

运行该模块中的测试用例方法

unittest.main()

 

装饰器:跳过该方法

@unittest.skip

 

装饰器: 满足条件时,跳过该方法

@skipIf(condition, reason)

  • condition:判断条件
  • reason:原因描述

 

装饰器:不满足条件时,跳过该方法

@skipUnless(condition, reason)

  • condition:判断条件
  • reason:原因描述

 

2.2 TestCase中常用方法

 

每条用例方法执行前,运行此方法

setUp()

 

每条用例方法执行后,运行此方法

tearDown()

 

该类下所有测试用例执行前,运行此方法

@classmethod

def setUpClass()

 

该类下所有测试用例执行后,运行此方法

@classmethod

def tearDownClass()

 

跳过执行测试用例

skipTest(reason)

reason:跳过测试的原因

注:该方法可以放在测试用例中执行,此时此用例中该方法后的代码不执行

如果放在setUp()中使用,则该类下的所有测试方法都不执行

三、实例展示:使用unittest运行UI测试用例

这里我们把15、16节中的元素等待、使用js语句这两个例子,作为两个测试用例,另外两个用例,一个使用装饰器跳过、另一个使用不规范的方法命名,期望结果TestCase会加载三个用例,只运行其中两个。

# -*- coding:utf-8 -*-
from selenium import webdriver
import unittest


class PcLogin(unittest.TestCase):


    @classmethod
    def setUpClass(cls):
        print("所有测试开始")

    def setUp(self):
        print("测试开始")
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(10)
        self.driver.set_page_load_timeout(15)

    @unittest.skip
    def test_02(self):
        """使用装饰器跳过此方法"""
        print("第二条用例")

    def demo_04(self):
        """方法命名不规范,不会运行此方法"""
        print("demo")

    def test_03_js(self):
        """使用js高亮显示元素"""
        print("第三条用例")
        self.driver.get("http://www.runoob.com/js/js-tutorial.html")
        # 高亮显示所定位的元素
        light_element = self.driver.find_element_by_id("s")
        js_sentence_light = "arguments[0].setAttribute('style', arguments[1]);"
        js_sentence_args = "color: yellow; border: 5px solid yellow;"
        self.driver.execute_script(js_sentence_light, light_element, js_sentence_args)

    def test_01_register(self):
        """百度注册页面"""
        print("第一条用例")
        self.driver.get("https://passport.baidu.com/v2/?login")
        # 点击注册
        self.driver.find_element("xpath", "//a[text()='立即注册']").click()
        # 切换页签
        all_handle = self.driver.window_handles
        self.driver.switch_to.window(all_handle[1])
        # 定位标签
        self.driver.find_element("xpath", "//label[text()='用户名']/following-sibling::input[last()]").send_keys("用户西城")
        self.driver.find_element("xpath", "//label[text()='手机号']/following-sibling::input[last()]").send_keys("18888888888")
        self.driver.find_element("xpath", "//label[text()='密码']/following-sibling::input[last()]").send_keys("U1sd23456")

    def tearDown(self):
        print("测试完成")
        self.driver.quit()


    @classmethod
    def tearDownClass(cls):
        print("所有测试结束")


if __name__ == '__main__':
    unittest.main()

运行结果:

所有测试开始
测试开始
第一条用例
测试完成
测试开始
.测试完成
测试开始
.第三条用例
测试完成
所有测试结束
.
----------------------------------------------------------------------
Ran 3 tests in 31.747s

OK

 

 

 

 

 

你可能感兴趣的:(web自动化测试)