someu / ui-test

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

UI TEST

基于POM模型的UI自动化测试框架。

关于项目

UI TEST是基于POM模型的UI自动化测试框架。框架中每个测试用例会打开一个浏览器,并有对应的一个或多个页面。框架封装了基础页面类和基础测试用例类,并提供了页面类和测试用例类的模版。测试人员通过命令行生成页面类或测试用例类,能快速的编写测试用例进行测试。目前框架实现的功能有:

  • POM模型
  • 命令行功能:运行测试、生成测试用例、生成页面
  • 测试报告,可截图
  • DDT 数据驱动
  • 日志输出
  • 浏览器代理

f75d532bc1b84d2aff7fd08c4765a219.jpg

目录结构

├─.chromedriver     # chrome driver
├─.logs             # 日志文件
├─.result           # 存放测试报告
├─.vscode           # vscode配置
├─case              # 测试用例
├─data              # 存放测试用例使用的数据,通过ddt注入
├─core              # 核心组件
└─page              # 页面

安装

  1. 克隆该项目

    git@github.com:someu/ui-test.git
  2. 安装python依赖

    pip install -r requirements.txt
  3. 下载chromedriver

    1. 在 chrome://settings/help 中查看chrome版本(只需要大版本,例如99)。
    2. https://chromedriver.chromium.org/downloads 中下载本地chrome版本对应的chromedriver。
  4. 修改.config.ini中的配置,如测试报告信息、浏览器代理,日志输出等。

使用

查看所有命令

python run.py

新建页面

python run.py new_page <name>

传入的name参数使用下划线命名的方式,会在page目录下生成<name>.py文件。page目录下每个文件都包含了一个页面类,页面类继承于BasePage类,上面封装了通用的页面操作方法。而测试人员需要在页面类上添加的内容有:

  • 页面URL,等待页面加载的时间
  • 该页面的业务逻辑,例如搜索、登录等。
  • 元组形式的页面元素的选择器,例如(By.ID, "input_1")(By.XPATH, "//input")

新建测试用例

python run.py new_case <name>

传入的name参数使用下划线命名的方式,会在case目录下生成test_<name>.py文件。case目录下每个文件都包含了一个测试用例类,测试用例类继承于BaseCase类,上面封装了通用的打开关闭浏览器等方法。而测试人员需要在测试用例类上添加的内容有:

  • 该测试用例使用的代理、chromedriver路径等配置
  • 该测试用例打开的页面
  • 测试方法,在测试方法里通过调用页面的业务逻辑来进行测试

框架整合了 ddt ,使用ddt的案例可以在 test_bing.py 的测试用例中查看。

@data("test1", "test2")
    def test_search(self, text):
        '''测试搜索'''
        self.assertIsNotNone(self.bp.search(text), "搜索功能")

运行测试

python run.py start

输出测试结果在 results 文件夹,格式为report_yyyymmdd_hhmmss.html。运行测试的案例:

13231c69b5834b3c173d33604f2495b1.jpg

查看当前配置

python run.py showconfig

输出程序运行时使用的配置,用于检查。

DDT

框架简单集成了 ddt ,在 test/test_bing.py 的测试用例上有案例。使用案例如下,通过 @data 装饰器,可以往测试方法中传递参数,并将原本的测试方法转化为多个测试方法。下面的例子中 test_search 测试方法将会转化为 test_search_1 test_search_2 两个测试方法,分别接收传来的两个参数。如果数据比较多,可以将数据放到 data 目录。

from ddt import ddt, data
# ...

@ddt
class TestBing(BaseCase):
    # ...

    @data("test1", "test2")
    def test_search(self, text):
        # ...

日志

运行框架生成的日志放到了 .log 文件夹,以当天时间命名。日志打印默认为DEBUG级别,可以在配置文件中修改打印级别和日志打印格式。

# ...
# 日志
[log]
level=DEBUG
format=%(asctime)s - %(name)s - %(levelname)-6s - %(filename)-8s : %(lineno)s line - %(message)s

测试报告

测试报告默认生成在 .result 文件夹,可以在配置文件中修改生成位置和相关参数。

# 测试报告
[report]
output=.result
title=测试报告
tester=Tester
desc=测试报告

运行测试时可以截图放到测试报告中,操作方法为:

  1. 获取屏幕或元素截图的base64字符串,页面类提供了两个截图的方法:

    • page.screenshot():对当前页面截屏
    • page.screenshot_element(*loc):对元素进行截屏
  2. 调用测试用例类的 append_screenshot 方法将截图放到测试报告中。

case/test_bing.py 的测试用例中有截图的案例:

class TestBing(BaseCase):
    # ...
    @data("test1", "test2")
    def test_search(self, text):
        '''测试搜索'''
        self.append_screenshot(self.bp.screenshot())
        self.bp.jump_to_origin()
        self.append_screenshot(self.bp.screenshot())
        self.append_screenshot(self.bp.screenshot_element(*self.bp.Input))

测试报告案例:

175def1825015a9c3c8330bf9cb83699.jpg

页面代理

科学上网访问页面时,页面的请求需要经过代理。框架中配置代理有两种方式:

  1. 在配置文件中配置,配置后所有测试用例都将使用代理。

    # 浏览器相关配置
    [browser]
    proxy=https://127.0.0.1:7890
  2. 在单个测试用例中配置,只有配置了的测试用例才使用代理。

    class TestGoogle(BaseCase):
        proxy = "socks5://127.0.0.1:1080"

About

License:MIT License


Languages

Language:Python 100.0%