zoukankan      html  css  js  c++  java
  • 基于 selenium 和 unittest 的 Web UI自动化测试框架-seldom

    转载:https://www.cnblogs.com/fnng/p/11846050.html(虫师大佬)

    pyse 更名为 seldom

    WebUI automation testing framework based on Selenium and unittest.

    基于 selenium 和 unittest 的 Web UI自动化测试框架。

    特点

    • 提供更加简单API编写自动化测试。
    • 提供脚手架,快速生成自动化测试项目。
    • 自动生成HTML测试报告生成。
    • 自带断言方法,断言title、URL 和 text。
    • 支持用例参数化。
    • 支持用例失败重跑。
    • 用例失败/错误截图。

    安装

    1 > pip install seldom
    2 If you want to keep up with the latest version, you can install with github repository url:
    3 
    4 > pip install -U git+https://github.com/defnngj/seldom.git@master

    Quick Start

    1、查看帮助:

     1 > seldom -h
     2 usage: seldom [-h] [-V] [--startproject STARTPROJECT] [-r R]
     3 
     4 WebUI automation testing framework based on Selenium.
     5 
     6 optional arguments:
     7   -h, --help            show this help message and exit
     8   -V, --version         show version
     9   --startproject STARTPROJECT
    10                         Specify new project name.
    11   -r R                  run test case

    2、创建项目:

    1 >seldom --startproject mypro

    3、目录结构:

    mypro/
    ├── test_dir/
    │   ├── test_sample.py
    ├── report/
    └── run.py
    
    • test_dir/目录实现用例编写。
    • report/ 目录存放生成的测试报告。
    • run.py 文件运行测试用例。

    3、运行项目:

    > seldom -r run.py
    Python 3.7.1  
                                                                      
    
                _      _
               | |    | |
     ___   ___ | |  __| |  ___   _ __ ___
    / __| / _ | | / _` | / _  | '_ ` _ 
    \__ |  __/| || (_| || (_) || | | | | |
    |___/ \___||_| \__,_| \___/ |_| |_| |_|
    -----------------------------------------
                                 @itest.info
    
    generated html file: file:///D:mypro
    eports2019_11_12_22_28_53_result.html   
    .1                                                                              
    

    4、查看报告

    你可以到 mypro eports 目录查看测试报告。

    API Documents

    simple demo

    请查看 demo/test_sample.py 文件

     1 import seldom
     2 
     3 
     4 class YouTest(seldom.TestCase):
     5 
     6     def test_case(self):
     7         """a simple test case """
     8         self.open("https://www.baidu.com")
     9         self.type(id_="kw", text="seldom")
    10         self.click(css="#su")
    11         self.assertTitle("seldom")
    12 
    13 
    14 if __name__ == '__main__':
    15     seldom.main("test_sample.py")

    说明:

    • 创建测试类必须继承 seldom.TestCase
    • 测试用例文件命名必须以 test 开头。
    • seldom的封装了assertTitleassertUrl 和 assertText等断言方法。

    main() 方法

    import seldom
    
    # ...
    
    if __name__ == '__main__':
        
        seldom.main(path="./",
                  browser="chrome",
                  title="百度测试用例", 
                  description="测试环境:chrome", 
                  debug=False,
                  rerun=0,
                  save_last_run=False
        )

    说明:

    • path : 指定测试目录或文件。
    • browser: 指定测试浏览器,默认Chrome
    • title : 指定测试报告标题。
    • description : 指定测试报告描述。
    • debug : debug模式,设置为True不生成测试HTML测试,默认为False
    • rerun : 设置失败重新运行次数,默认为 0
    • save_last_run : 设置只保存最后一次的结果,默认为False

    Run the test

    1 import seldom
    2 
    3 seldom.main(path="./")  # 当前目录下的所有测试文件
    4 seldom.main(path="./test_dir/")  # 指定目录下的所有测试文件
    5 seldom.main(path="./test_dir/test_sample.py")  # 指定目录下的测试文件
    6 seldom.main(path="test_sample.py")  # 指定当前目录下的测试文件

    说明:

    • 如果指定的目录,测试文件必须以test 开头。
    • 如果要运行子目录下的文件,必须在子目录下加 __init__.py 文件。

    支持的浏览器及驱动

    如果你想指定测试用例在不同的浏览器中运行,非常简单,只需要在seldom.main()方法中通过browser 参数设置。

    import seldom
    
    if __name__ == '__main__':
        seldom.main(browser="chrome") # chrome浏览器,默认值
        seldom.main(browser="firefox") # firefox浏览器
        seldom.main(browser="ie")  # IE浏览器
        seldom.main(browser="opera") # opera浏览器
        seldom.main(browser="edge") # edge浏览器
        seldom.main(browser="chrome_headless") # chrome浏览器headless模式
        seldom.main(browser="firefox_headless") # Firefox浏览器headless模式

    不同浏览器驱动下载地址:

    geckodriver(Firefox):https://github.com/mozilla/geckodriver/releases

    Chromedriver(Chrome):https://sites.google.com/a/chromium.org/chromedriver/home

    IEDriverServer(IE):http://selenium-release.storage.googleapis.com/index.html

    operadriver(Opera):https://github.com/operasoftware/operachromiumdriver/releases

    MicrosoftWebDriver(Edge):https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver

    ==========================================================

    元素定位

    1 <form id="form" class="fm" action="/s" name="f">
    2     <span class="bg s_ipt_wr quickdelete-wrap">
    3         <input id="kw" class="s_ipt" name="wd">

    定位方式:

    1 self.type(id_="kw", text="seldom")
    2 self.type(name="wd", text="seldom")
    3 self.type(class_name="s_ipt", text="seldom")
    4 self.type(tag="input", text="seldom")
    5 self.type(link_text="hao123", text="seldom")
    6 self.type(partial_link_text="hao", text="seldom")
    7 self.type(xpath="//input[@id='kw']", text="seldom")
    8 self.type(css="#kw", text="seldom")

    参数化测试用例

    seldom 支持参数化测试用例,集成了parameterized

     1 import seldom
     2 from seldom import ddt
     3 
     4 # ...
     5 
     6 class BaiduTest(seldom.TestCase):
     7 
     8     @ddt.data([
     9         (1, 'seldom'),
    10         (2, 'selenium'),
    11         (3, 'unittest'),
    12     ])
    13     def test_baidu(self, name, keyword):
    14         """
    15          used parameterized test
    16         :param name: case name
    17         :param keyword: search keyword
    18         """
    19         self.open("https://www.baidu.com")
    20         self.type(id_="kw", text=keyword)
    21         self.click(css="#su")
    22         self.assertTitle(search_key+"_百度搜索")

    page objects 设计模式

    seldom 支持Page objects设计模式,可以配合poium 使用。

     1 import seldom
     2 from poium import Page, PageElement
     3 
     4 
     5 class BaiduPage(Page):
     6     """baidu page"""
     7     search_input = PageElement(id_="kw")
     8     search_button = PageElement(id_="su")
     9 
    10 
    11 class BaiduTest(seldom.TestCase):
    12     """Baidu serach test case"""
    13 
    14     def test_case(self):
    15         """
    16         A simple test
    17         """
    18         page = BaiduPage(self.driver)
    19         page.get("https://www.baidu.com")
    20         page.search_input = "seldom"
    21         page.search_button.click()
    22         self.assertTitle("seldom_百度搜索")
    23 
    24 
    25 if __name__ == '__main__':
    26     seldom.main("test_po_demo.py")

    poium提供了更多好用的功能,使Page层的创建更加简单。亲测好用

  • 相关阅读:
    Mysql基础(十):MYSQL中使用事务的案例
    Mysql基础(十一):流程控制结构、分支结构、循环结构
    Mysql基础(九):MySQL 事务
    java 基本语法(十九)Optional类的使用
    java 基本语法(十八)Lambda (五)Stream API
    java 基本语法(十七)Lambda (四)构造器引用与数组引用
    java 基本语法(十六)Lambda (三)函数式接口
    设计模式-桥梁模式
    设计模式-不变模式
    设计模式-状态模式
  • 原文地址:https://www.cnblogs.com/cheng10/p/14522217.html
Copyright © 2011-2022 走看看