简单 UI 自动化测试框架 seldom
Posted 酔清风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单 UI 自动化测试框架 seldom相关的知识,希望对你有一定的参考价值。
感谢大家的莅临,文章末尾为大家准备了一些福利,需要的可以获取哦。
简单 UI 自动化测试框架 seldom
https://github.com/SeldomQA/seldom
seldom 的定位
如果把 unittest/pytest + htmlTestRunner/allure + selenium + PO + ...
看成是 DIY 电脑的话,那 seldom
就品牌机, 品牌机用起来就是比较省心,适合小白用户,高手轻喷或绕道。
seldom 本质上 基于 unittest 和 selenium 封装。
pytest
更强大,为什么选 unittest?
- 因为它有父类的继承,更容易封装。
- pytest 的参数化虽然很强大,但不够简洁。
项目下有详细的文档,我就介绍自认为的几个特色吧!
提供脚手架
通过命令创建项目,降低小白门槛嘛!
> seldom -project mypro
目录结构如下:
mypro/
├── test_dir/
│ ├── data.json
│ ├── test_sample.py
├── reports/
└── run.py
test_dir/
目录实现用例编写。reports/
目录存放生成的测试报告。run.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()
运行用例
> python3 run.py
2020-05-16 11:34:36,014 INFO
_ _
| | | |
___ ___ | | __| | ___ _ __ ___
/ __| / _ \\| | / _` | / _ \\ | '_ ` _ \\
\\__ \\| __/| || (_| || (_) || | | | | |
|___/ \\___||_| \\__,_| \\___/ |_| |_| |_|
-----------------------------------------
@itest.info
2020-05-16 11:34:38,798 INFO ✅ Find element: id=kw
2020-05-16 11:34:38,813 INFO 🖋 input 'seldom'.
2020-05-16 11:34:38,991 INFO ✅ Find element: css selector=#su
2020-05-16 11:34:39,004 INFO 🖱 click.
2020-05-16 11:34:40,091 INFO 👀 assertIn title: seldom_百度搜索.
2020-05-16 11:34:40,092 INFO generated html file: file:Users/tech/mypro/reports/2020_05_16_11_34_36_result.html
.1%
测试报告
数据驱动
支持代码中的数据驱动,也支持 excel
, csv
, xml
, json
外部文件的数据驱动。
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+"_百度搜索")
json 文件
"login": [
["admin", "admin123"],
["guest", "guest123"]
]
调用 json 文件
import seldom
from seldom import file_data
class YouTest(seldom.TestCase):
@user3("./data.json", key="login")
def test_login(self, username, password):
"""a simple test case """
print(username)
print(password)
# ...
你不喜欢 seldom 的,也可以用第三方的 ddt 。
Page Objects 设计模式
seldom 和 poium 配合使用。
import seldom
from poium import Page, Element
class BaiduPage(Page):
"""baidu page"""
search_input = Element(id_="kw")
search_button = Element(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()
生成随机数据
seldom 提供了一些方法可以生成常用的随机数据。用户名、邮箱、日期、手机号...都可以随机生成。
import seldom
from seldom import testdata
class YouTest(seldom.TestCase):
def test_case(self):
"""a simple test case """
word = testdata.get_word()
self.open("https://www.baidu.com")
self.type(id_="kw", text=word)
self.click(css="#su")
self.assertTitle(word + "_百度搜索")
if __name__ == '__main__':
seldom.main()
用例依赖
虽然不建议将用例设计的有依赖,但有时不可避免。seldom 中也比较方便的实现了这一功能。
import seldom
from seldom import depend
class TestDepend(seldom.TestCase):
def test_001(self):
self.get("https://www.runoob.com/try/try2.php?filename=bootstrap3-form-checkboxradio")
self.switch_to_frame(id_="iframeResult")
self.click(css='[type=checkbox]--error') # 元素定位错误
@depend("test_001")
def test_002(self):
self.click(xpath='//input[@type="checkbox"]', index=1)
@depend("test_002")
def test_003(self):
self.click(id_='optionsRadios1')
if __name__ == '__main__':
seldom.main()
seldom 是灵活的
例如,你只是觉得 seldom 的生成随机数好用,你完全可以单独拿出来用。
import pytest
from selenium import webdriver
from seldom import testdata
def test_case():
dr = webdriver.Chrome()
dr.get("https://www.baidu.com")
dr.find_element_by_id("kw").send_keys(testdata.get_word())
福利
以上是关于简单 UI 自动化测试框架 seldom的主要内容,如果未能解决你的问题,请参考以下文章