Skip to content
WebUI automation testing framework based on Selenium
Python
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
demo update dome Dec 28, 2019
docs update doc error Feb 3, 2020
seldom Modify the parameterized method name Feb 3, 2020
.gitignore update assert Nov 26, 2019
CHANGES.md v 1.2.0 Feb 1, 2020
LICENSE add LICENSE Nov 6, 2019
README.md
description.rst update description Jan 4, 2020
requirements.txt Add dependency Library Dec 28, 2019
seldom_logo.gif add logo Nov 20, 2019
setup.py add colorama Dec 28, 2019
test_report.png new report style Nov 30, 2019

README.md

WebUI automation testing framework based on Selenium and unittest.

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

特点

  • 提供更加简单API编写自动化测试。
  • 提供脚手架,快速生成自动化测试项目。
  • 全局启动和关闭浏览器,减少浏览器的启动次数。
  • 支持用例参数化。
  • 支持用例失败/错误重跑。
  • 支持生成HTML测试报告生成,运行失败/错误自动截图。

安装

> pip install seldom

If you want to keep up with the latest version, you can install with github repository url:

> pip install -U git+https://github.com/SeldomQA/seldom.git@master

Quick Start

1、查看帮助:

> seldom -h
usage: seldom [-h] [-v] [--project PROJECT] [-r R] [-install INSTALL]

WebUI automation testing framework based on Selenium.

optional arguments:
  -h, --help         show this help message and exit
  -v, --version      show version
  --project PROJECT  Create an Seldom automation test project.
  -r R               run test case
  -install INSTALL   Install the browser driver, For example, 'chrome',
                     'firefox'.

2、创建项目:

>seldom --project mypro

目录结构如下:

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

3、运行项目:

> seldom -r run.py
Python 3.7.1

            _      _
           | |    | |
 ___   ___ | |  __| |  ___   _ __ ___
/ __| / _ \| | / _` | / _ \ | '_ ` _ \
\__ \|  __/| || (_| || (_) || | | | | |
|___/ \___||_| \__,_| \___/ |_| |_| |_|
-----------------------------------------
                             @itest.info

generated html file: file:///D:\mypro\reports\2019_11_12_22_28_53_result.html
.1

4、查看报告

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

API Documents

simple demo

请查看 demo/test_sample.py 文件

import seldom


class YouTest(seldom.TestCase):

    def test_case(self):
        """a simple test case """
        self.open("https://www.baidu.com")
        self.type(id_="kw", text="seldom")
        self.click(css="#su")
        self.assertTitle("seldom_百度搜索")


if __name__ == '__main__':
    seldom.main("test_sample.py")

说明:

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

main() 方法

import seldom

# ...

if __name__ == '__main__':

    seldom.main(path="./",
              browser="chrome",
              title="百度测试用例",
              description="测试环境:chrome",
              debug=False,
              rerun=0,
              save_last_run=False,
              driver_path=None,
    )

说明:

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

Run the test

import seldom

seldom.main(path="./")  # 当前目录下的所有测试文件
seldom.main(path="./test_dir/")  # 指定目录下的所有测试文件
seldom.main(path="./test_dir/test_sample.py")  # 指定目录下的测试文件
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模式

seldom 支持chrome和frefox浏览器的驱动下载:

> seldom -install chrome
> seldom -install firefox

下载的驱动文件默认保存在lib 目录下面。

当然,你也可以手动下载不同浏览器驱动:

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

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

元素定位

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

定位方式:

self.type(id_="kw", text="seldom")
self.type(name="wd", text="seldom")
self.type(class_name="s_ipt", text="seldom")
self.type(tag="input", text="seldom")
self.type(link_text="hao123", text="seldom")
self.type(partial_link_text="hao", text="seldom")
self.type(xpath="//input[@id='kw']", text="seldom")
self.type(css="#kw", text="seldom")

帮助:

断言方法

self.assertTitle("title")   # 断言标题是否等于"title"
self.assertInTitle("title") # 断言标题是否包含"title"
self.assertURL("url")  # 断言URL是否等于
self.assertInURL("url")  # 断言URL是否包含 
self.assertText("text")  # 断言页面是否存在“text”
self.assertAlertText("text") # 断言警告是否存在"text" 提示信息

跳过用例

import seldom


class YouTest(seldom.TestCase):

    @seldom.skip("跳过这条用例的执行")
    def test_case(self):
        """a simple test case """
        #...

参数化测试用例

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

import seldom
from seldom import data

# ...

class BaiduTest(seldom.TestCase):

    @data([
        (1, 'seldom'),
        (2, 'selenium'),
        (3, 'unittest'),
    ])
    def test_baidu(self, name, keyword):
        """
         used parameterized test
        :param name: case name
        :param keyword: search keyword
        """
        self.open("https://www.baidu.com")
        self.type(id_="kw", text=keyword)
        self.click(css="#su")
        self.assertTitle(keyword+"_百度搜索")

也可以针对测试类进行参数化, 通过data_class 方法:

import seldom
from seldom import data_class


@data_class(
    ("keyword", "assert_tile"),
    [("seldom", "seldom_百度搜索"),
     ("python", "python_百度搜索")
])
class YouTest(seldom.TestCase):

    def test_case(self):
        """a simple test case """
        self.open("https://www.baidu.com")
        self.type(id_="kw", text=self.keyword)
        self.click(css="#su")
        self.assertTitle(self.assert_tile)

page objects 设计模式

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

import seldom
from poium import Page, PageElement


class BaiduPage(Page):
    """baidu page"""
    search_input = PageElement(id_="kw")
    search_button = PageElement(id_="su")


class BaiduTest(seldom.TestCase):
    """Baidu serach test case"""

    def test_case(self):
        """
        A simple test
        """
        page = BaiduPage(self.driver)
        page.get("https://www.baidu.com")
        page.search_input = "seldom"
        page.search_button.click()
        self.assertTitle("seldom_百度搜索")


if __name__ == '__main__':
    seldom.main("test_po_demo.py")

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

感谢

感谢从以下项目中得到思路和帮助。

交流

QQ群:948994709

You can’t perform that action at this time.