zoukankan      html  css  js  c++  java
  • unittest(一)IDE导出的代码分析

    在 Python 语言下有诸多单元测试框架,如 unittest、Pytest、nose 等,其中 unittest 框架(原名 PyUnit 框架)为 Python 语言自带
    的单元测试框架,从 Python 2.1 及其以后的版本都将 PyUnit 作为一个标准模块放入 Python 开发包中。

    通过katalon录制并导出:

    以下的使用katalon录制--带出的代码:

    # -*- coding: utf-8 -*-
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.support.ui import Select
    from selenium.common.exceptions import NoSuchElementException
    from selenium.common.exceptions import NoAlertPresentException
    import unittest, time, re
    
    class UntitledTestCase(unittest.TestCase):
        def setUp(self):
            self.driver = webdriver.Firefox()
            self.driver.implicitly_wait(30)
            self.base_url = "https://www.katalon.com/"
            self.verificationErrors = []
            self.accept_next_alert = True
        
        def test_untitled_test_case(self):
            driver = self.driver
            driver.get("https://www.baidu.com/")
            driver.find_element_by_id("kw").clear()
            driver.find_element_by_id("kw").send_keys(u"测试")
            driver.find_element_by_id("su").click()
            driver.close()
        
        def is_element_present(self, how, what):
            try: self.driver.find_element(by=how, value=what)
            except NoSuchElementException as e: return False
            return True
        
        def is_alert_present(self):
            try: self.driver.switch_to_alert()
            except NoAlertPresentException as e: return False
            return True
        
        def close_alert_and_get_its_text(self):
            try:
                alert = self.driver.switch_to_alert()
                alert_text = alert.text
                if self.accept_next_alert:
                    alert.accept()
                else:
                    alert.dismiss()
                return alert_text
            finally: self.accept_next_alert = True
        
        def tearDown(self):
            self.driver.quit()
            self.assertEqual([], self.verificationErrors)
    
    if __name__ == "__main__":
        unittest.main()

     分析一下代码:

    import unittest

    首先要引入 unittest 框架包。

    class BaiduTest(unittest.TestCase):

    Baidu 类继承 unittest.TestCase 类,从 TestCase 类继承是告诉 unittest 模块的方式,这是一个测试案例。

    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url = "http://www.baidu.com/"
        self.verificationErrors = []
        self.accept_next_alert = True

    setUp 用于设置初始化工作,在每一个测试用例前先被执行,它与 tearDown 方法相呼应,后者在每一个测试用例执行后被执行。这里的初始化工作定义了浏览器启动和基础 URL 地址。
    implicitly_wait()用于设置整个页面元素的隐性等待,30 秒。

    接下来定义空的 verificationErrors 数组,脚本运行时的错误信息将被打印到这个数组中。
    定义 accept_next_alert 变量,表示是否继续接受下一个警告,初始化状态为 Ture。

    def test_baidu(self):
        driver = self.driver
        driver.get(self.base_url + "/")
        driver.find_element_by_id("kw").clear()
        driver.find_element_by_id("kw").send_keys("selenium ide")
        driver.find_element_by_id("su").click()

    test_baidu 中放置的就是测试脚本。

    def is_element_present(self, how, what):
       try:
          self.driver.find_element(by=how, value=what)
       except NoSuchElementException, e:
          return False
       return True

    is_element_present 方法用来查找页面元素是否存在,通过 find_element()来接收元素的定位方法(how)和定位值(what),
    如果定位到元素返回 Ture,否则出现异常并返回 Flase。try...except....为Python 语言的异处理。

    def is_alert_present(self):
       try:
          self.driver.switch_to_alert()
       except NoAlertPresentException, e:
          return False
       return True

    is_alert_present()方法用来处理弹出的警告框,用 WebDriver 所提供的 switch_to_alert()方法来捕捉警告框。如果捕捉到警告框返回 Ture,否则异常,返回 Flase。

    def close_alert_and_get_its_text(self):
        try:
            alert = self.driver.switch_to_alert()
            alert_text = alert.text
        if self.accept_next_alert:
            alert.accept()
        else:
            alert.dismiss()
        return alert_text
    finally:
        self.accept_next_alert = True

    close_alert_and_get_its_text()关闭警告并且获得警告信息。首先通过 switch_to_alert()获得警告,通过.text 获得警告框信息。
    接着通过 if 语句判断 accept_next_alert 的状态,在 setUp()已经初始化状态为 Ture,如果为 Ture,通过 accept()接受警告。否则 dismiss()忽略此警告。

    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)

    tearDown 方法在每个测试方法执行后调用,这个方法用于完成测试用例执行后的清理工作,如退出浏览器、关闭驱动,恢复用例执行状态等。
    在 setUp()方法中定义了 verificationErrors 为空数组,这里通过 assertEqual()比较其是否为空,如果为空说明用例执行的过程过程中没有出现异常,否则将抛出 AssertionError 异常。

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

    整个测试过程集成在 unitest.main()模块中,其默认执行以 test 开头的方法。

    if __name__ == “__main__”:

    顾名思义,if 就是如果的意思,在句子开始处加上 if,就说明,这个句子是一个条件语句。接着是__name__,__name__作为模块的内置属性,
    简单点说呢,就是.py 文件的调用方式。最后是__main__,.py 文件有两种使用方式:作为模块被调用和直接使用。如果它等于"__main__"就表示是直接执行


  • 相关阅读:
    HAProxy、Keepalived 在 Ocatvia 的应用实现与分析
    Octavia 的 HTTPS 与自建、签发 CA 证书
    Octavia 创建 loadbalancer 的实现与分析
    OpenStack Rally 质量评估与自动化测试利器
    自建 CA 中心并签发 CA 证书
    Failed building wheel for netifaces
    通过 vSphere WS API 获取 vCenter Datastore Provisioned Space 置备空间
    OpenStack Placement Project
    我们建了一个 Golang 硬核技术交流群(内含视频福利)
    没有图形界面的软件有什么用?
  • 原文地址:https://www.cnblogs.com/dydxw/p/10564892.html
Copyright © 2011-2022 走看看