[GitHub](https://github.com/SeldomQA/seldom) | [Gitee](https://gitee.com/fnngj/seldom) |
![](seldom_logo.jpg)
[![PyPI version](https://badge.fury.io/py/seldom.svg)](https://badge.fury.io/py/seldom) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/seldom)
Seldom is an automation testing framework based on unittest.
> seldom 是基于unittest 的自动化测试框架。
### Features
⭐ web/app/api全功能测试框架
⭐ 提供脚手架快速创建自动化项目
⭐ 集成`XTestRunner`测试报告,现代美观
⭐ 提供丰富的断言
⭐ 提供强大的`数据驱动`
⭐ 平台化支持
### Install
```shell
pip install seldom
```
If you want to keep up with the latest version, you can install with GitHub/Gitee repository url:
```shell
> pip install -U git+https://github.com/SeldomQA/seldom.git@master
> pip install -U git+https://gitee.com/fnngj/seldom.git@master
```
### 🤖 Quick Start
1、查看帮助:
```shell
seldom --help
Usage: seldom [OPTIONS]
seldom CLI.
Options:
--version Show version.
--project-api TEXT Create an API automation test project.
--project-app TEXT Create an App automation test project.
--project-web TEXT Create an Web automation test project.
-cc, --clear-cache BOOLEAN Clear all caches of seldom.
-p, --path TEXT Run test case file path.
-c, --collect / -nc, --no-collect
Collect project test cases. Need the
`--path`.
-l, --level [data|method] Parse the level of use cases. Need the
--path.
-j, --case-json TEXT Test case files. Need the `--path`.
-e, --env TEXT Set the Seldom run environment `Seldom.env`.
-b, --browser [chrome|firefox|ie|edge|safari]
The browser that runs the Web UI automation
tests. Need the `--path`.
-u, --base-url TEXT The base-url that runs the HTTP automation
tests. Need the `--path`.
-d, --debug / -nd, --no-debug Debug mode. Need the `--path`.
-rr, --rerun INTEGER The number of times a use case failed to run
again. Need the `--path`.
-r, --report TEXT Set the test report for output. Need the
`--path`.
-m, --mod TEXT Run tests modules, classes or even
individual test methods from the command
line.
-ll, --log-level [TRACE|DEBUG|INFO|SUCCESS|WARNING|ERROR]
Set the log level.
-h2c, --har2case TEXT HAR file converts an seldom test case.
-s2c, --swagger2case TEXT Swagger file converts an seldom test case.
--api-excel TEXT Run the api test cases in the excel file.
--help Show this message and exit.
```
2、创建项目:
```shell
> seldom --project-api myapi # API automation test project.
> seldom --project-app myapp # or App automation test project.
> seldom --project-web myweb # or Web automation test project.
```
目录结构如下:
```shell
myweb/
├── test_dir/
│ ├── __init__.py
│ └── test_sample.py
├── test_data/
│ └── data.json
├── reports/
└── confrun.py
```
* `test_dir/` 测试用例目录。
* `test_data/` 测试数据文件目录。
* `reports/` 测试报告目录。
* `confrun.py` 运行配置文件。
3、运行项目:
* ❌️ 在`PyCharm`中右键执行。
* ✔️ 通过命令行工具执行。
```shell
> seldom -p test_dir # 运行 test_dir 测试目录
__ __
________ / /___/ /___ ____ ____
/ ___/ _ \/ / __ / __ \/ __ ` ___/
(__ ) __/ / /_/ / /_/ / / / / / /
/____/\___/_/\__,_/\____/_/ /_/ /_/ v3.x.x
-----------------------------------------
@itest.info
...
2022-04-30 18:37:36 log.py | INFO | ✅ Find 1 element: id=sb_form_q -> input 'seldom'.
2022-04-30 18:37:39 log.py | INFO | 👀 assertIn title: seldom - 搜索.
.52022-04-30 18:37:39 log.py | INFO | 📖 https://cn.bing.com
2022-04-30 18:37:41 log.py | INFO | ✅ Find 1 element: id=sb_form_q -> input 'poium'.
2022-04-30 18:37:42 log.py | INFO | 👀 assertIn title: poium - 搜索.
.62022-04-30 18:37:42 log.py | INFO | 📖 https://cn.bing.com
2022-04-30 18:37:43 log.py | INFO | ✅ Find 1 element: id=sb_form_q -> input 'XTestRunner'.
2022-04-30 18:37:44 log.py | INFO | 👀 assertIn title: XTestRunner - 搜索.
.72022-04-30 18:37:44 log.py | INFO | 📖 http://www.itest.info
2022-04-30 18:37:52 log.py | INFO | 👀 assertIn url: http://www.itest.info/.
.82022-04-30 18:37:52 log.py | SUCCESS | generated html file: file:///D:\mypro\reports\2022_04_30_18_37_29_result.html
2022-04-30 18:37:52 log.py | SUCCESS | generated log file: file:///D:\mypro\reports\seldom_log.log
```
4、查看报告
你可以到 `mypro\reports\` 目录查看测试报告。
![test report](./test_report.png)
## 🔬 Demo
> seldom继承unittest单元测试框架,完全遵循unittest编写用例规范。
[demo](/demo) 提供了丰富实例,帮你快速了解seldom的用法。
### Web UI 测试
```python
import seldom
from seldom import Steps
class BaiduTest(seldom.TestCase):
def test_case_one(self):
"""a simple test case """
self.open("https://www.baidu.com")
self.type(id_="kw", text="seldom")
self.click(css="#su")
self.assertTitle("seldom_百度搜索")
def test_case_two(self):
"""method chaining """
Steps().open("https://www.baidu.com").find("#kw").type("seldom").find("#su").click()
self.assertTitle("seldom_百度搜索")
if __name__ == '__main__':
seldom.main(browser="chrome")
```
__说明:__
* `seldom.main()` 通过 `browser` 指定运行的浏览器。
### HTTP 测试
seldom 2.0 支持HTTP测试
```python
import seldom
class TestRequest(seldom.TestCase):
def test_put_method(self):
self.put('/put', data={'key': 'value'})
self.assertStatusCode(200)
def test_post_method(self):
self.post('/post', data={'key': 'value'})
self.assertStatusCode(200)
def test_get_method(self):
payload = {'key1': 'value1', 'key2': 'value2'}
self.get("/get", params=payload)
self.assertStatusCode(200)
def test_delete_method(self):
self.delete('/delete')
self.assertStatusCode(200)
if __name__ == '__main__':
seldom.main(base_url="http://httpbin.org")
```
__说明:__
* `seldom.main()` 通过 `base_url` 指定接口项目基本URL地址。
### App 测试
seldom 3.0 支持App测试
```python
import seldom
from seldom.appium_lab.keyboard import KeyEvent
from seldom.appium_lab.android import UiAutomator2Options
class TestBingApp(seldom.TestCase):
def start(self):
self.ke = KeyEvent(self.driver)
def test_bing_search(self):
"""
test bing App search
"""
self.sleep(2)
self.click(id_="com.microsoft.bing:id/sa_hp_header_search_box")
self.type(id_="com.microsoft.bing:id/sapphire_search_header_input", text="seldomQA")
self.ke.press_key("ENTER")
self.sleep(1)
elem = self.get_elements(xpath='//android.widget.TextView')
self.assertIn("seldom", elem[0].text.lower())
if __name__ == '__main__':
capabilities = {
'deviceName': 'ELS-AN00',
'automationName': 'UiAutomator2',
'platformName': 'Android',
'appPackage': 'com.microsoft.bing',
'appActivity': 'com.microsoft.sapphire.app.main.MainSapphireActivity',
'noReset': True,
}
options = UiAutomator2Options().load_capabilities(capabilities)
seldom.main(app_server="http://127.0.0.1:4723", app_info=options, debug=True)
```
__说明:__
* `seldom.main()` 通过 `app_info` 指定App信息; `app_server` 指定appium server 地址。
## 📖 Document
[中文文档](https://seldomqa.github.io/)
### 项目实例
基于seldom的web UI自动化项目:
https://github.com/SeldomQA/seldom-web-testing
基于seldom的接口自动化项目:
https://github.com/defnngj/seldom-api-testing
## 微信(WeChat)
> 相关书籍推荐, 基于 SeldomQA 相关开源项目,虫师 编著。
<p>
<a href="https://item.jd.com/14859108.html">
<img alt="京东链接" src="book.jpg" style="width: 220px; margin-right: 140px;" />
</a>
</p>
> 欢迎添加微信,交流和反馈问题。
<div style="display: flex;justify-content: space-between;width: 100%">
<p><img alt="微信" src="wechat.jpg" style="width: 200px;height: 100%" ></p>
</div>
### Star History
![Star History Chart](https://api.star-history.com/svg?repos=SeldomQA/seldom&type=Date)
### 感谢
感谢从以下项目中得到思路和帮助。
* [parameterized](https://github.com/wolever/parameterized)
* [utx](https://github.com/jianbing/utx)
### 贡献者
<a href="https://github.com/SeldomQA/seldom/graphs/contributors">
<img src="https://contrib.rocks/image?repo=SeldomQA/seldom" />
</a>
### 交流
QQ群:948994709
Raw data
{
"_id": null,
"home_page": "https://seldomqa.github.io",
"name": "seldom",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.8",
"maintainer_email": null,
"keywords": "sedom, selenium, appium, requests",
"author": "bugmaster",
"author_email": "fnngj@126.com",
"download_url": "https://files.pythonhosted.org/packages/82/e3/2ec0d792a09b10bb1f65c955cddc9de1a06f5b8aa28649a7a54dd41b1157/seldom-3.11.0.tar.gz",
"platform": null,
"description": "[GitHub](https://github.com/SeldomQA/seldom) | [Gitee](https://gitee.com/fnngj/seldom) |\n\n![](seldom_logo.jpg)\n\n[![PyPI version](https://badge.fury.io/py/seldom.svg)](https://badge.fury.io/py/seldom) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/seldom)\n\nSeldom is an automation testing framework based on unittest.\n\n> seldom \u662f\u57fa\u4e8eunittest \u7684\u81ea\u52a8\u5316\u6d4b\u8bd5\u6846\u67b6\u3002\n\n### Features\n\n\u2b50 web/app/api\u5168\u529f\u80fd\u6d4b\u8bd5\u6846\u67b6\n\n\u2b50 \u63d0\u4f9b\u811a\u624b\u67b6\u5feb\u901f\u521b\u5efa\u81ea\u52a8\u5316\u9879\u76ee\n\n\u2b50 \u96c6\u6210`XTestRunner`\u6d4b\u8bd5\u62a5\u544a\uff0c\u73b0\u4ee3\u7f8e\u89c2\n\n\u2b50 \u63d0\u4f9b\u4e30\u5bcc\u7684\u65ad\u8a00\n\n\u2b50 \u63d0\u4f9b\u5f3a\u5927\u7684`\u6570\u636e\u9a71\u52a8`\n\n\u2b50 \u5e73\u53f0\u5316\u652f\u6301\n\n### Install\n\n```shell\npip install seldom\n```\n\nIf you want to keep up with the latest version, you can install with GitHub/Gitee repository url:\n\n```shell\n> pip install -U git+https://github.com/SeldomQA/seldom.git@master\n> pip install -U git+https://gitee.com/fnngj/seldom.git@master\n```\n\n### \ud83e\udd16 Quick Start\n\n1\u3001\u67e5\u770b\u5e2e\u52a9\uff1a\n\n```shell\nseldom --help\nUsage: seldom [OPTIONS]\n\n seldom CLI.\n\nOptions:\n --version Show version.\n --project-api TEXT Create an API automation test project.\n --project-app TEXT Create an App automation test project.\n --project-web TEXT Create an Web automation test project.\n -cc, --clear-cache BOOLEAN Clear all caches of seldom.\n -p, --path TEXT Run test case file path.\n -c, --collect / -nc, --no-collect\n Collect project test cases. Need the\n `--path`.\n -l, --level [data|method] Parse the level of use cases. Need the\n --path.\n -j, --case-json TEXT Test case files. Need the `--path`.\n -e, --env TEXT Set the Seldom run environment `Seldom.env`.\n -b, --browser [chrome|firefox|ie|edge|safari]\n The browser that runs the Web UI automation\n tests. Need the `--path`.\n -u, --base-url TEXT The base-url that runs the HTTP automation\n tests. Need the `--path`.\n -d, --debug / -nd, --no-debug Debug mode. Need the `--path`.\n -rr, --rerun INTEGER The number of times a use case failed to run\n again. Need the `--path`.\n -r, --report TEXT Set the test report for output. Need the\n `--path`.\n -m, --mod TEXT Run tests modules, classes or even\n individual test methods from the command\n line.\n -ll, --log-level [TRACE|DEBUG|INFO|SUCCESS|WARNING|ERROR]\n Set the log level.\n -h2c, --har2case TEXT HAR file converts an seldom test case.\n -s2c, --swagger2case TEXT Swagger file converts an seldom test case.\n --api-excel TEXT Run the api test cases in the excel file.\n --help Show this message and exit.\n```\n\n2\u3001\u521b\u5efa\u9879\u76ee\uff1a\n\n```shell\n> seldom --project-api myapi # API automation test project.\n> seldom --project-app myapp # or App automation test project.\n> seldom --project-web myweb # or Web automation test project.\n```\n\n\u76ee\u5f55\u7ed3\u6784\u5982\u4e0b\uff1a\n\n```shell\nmyweb/\n\u251c\u2500\u2500 test_dir/\n\u2502 \u251c\u2500\u2500 __init__.py\n\u2502 \u2514\u2500\u2500 test_sample.py\n\u251c\u2500\u2500 test_data/\n\u2502 \u2514\u2500\u2500 data.json\n\u251c\u2500\u2500 reports/\n\u2514\u2500\u2500 confrun.py\n```\n\n* `test_dir/` \u6d4b\u8bd5\u7528\u4f8b\u76ee\u5f55\u3002\n* `test_data/` \u6d4b\u8bd5\u6570\u636e\u6587\u4ef6\u76ee\u5f55\u3002\n* `reports/` \u6d4b\u8bd5\u62a5\u544a\u76ee\u5f55\u3002\n* `confrun.py` \u8fd0\u884c\u914d\u7f6e\u6587\u4ef6\u3002\n\n3\u3001\u8fd0\u884c\u9879\u76ee\uff1a\n\n* \u274c\ufe0f \u5728`PyCharm`\u4e2d\u53f3\u952e\u6267\u884c\u3002\n\n* \u2714\ufe0f \u901a\u8fc7\u547d\u4ee4\u884c\u5de5\u5177\u6267\u884c\u3002\n\n```shell\n> seldom -p test_dir # \u8fd0\u884c test_dir \u6d4b\u8bd5\u76ee\u5f55\n\n\n __ __\n ________ / /___/ /___ ____ ____\n / ___/ _ \\/ / __ / __ \\/ __ ` ___/\n (__ ) __/ / /_/ / /_/ / / / / / /\n/____/\\___/_/\\__,_/\\____/_/ /_/ /_/ v3.x.x\n-----------------------------------------\n @itest.info\n...\n\n2022-04-30 18:37:36 log.py | INFO | \u2705 Find 1 element: id=sb_form_q -> input 'seldom'.\n2022-04-30 18:37:39 log.py | INFO | \ud83d\udc40 assertIn title: seldom - \u641c\u7d22.\n.52022-04-30 18:37:39 log.py | INFO | \ud83d\udcd6 https://cn.bing.com\n2022-04-30 18:37:41 log.py | INFO | \u2705 Find 1 element: id=sb_form_q -> input 'poium'.\n2022-04-30 18:37:42 log.py | INFO | \ud83d\udc40 assertIn title: poium - \u641c\u7d22.\n.62022-04-30 18:37:42 log.py | INFO | \ud83d\udcd6 https://cn.bing.com\n2022-04-30 18:37:43 log.py | INFO | \u2705 Find 1 element: id=sb_form_q -> input 'XTestRunner'.\n2022-04-30 18:37:44 log.py | INFO | \ud83d\udc40 assertIn title: XTestRunner - \u641c\u7d22.\n.72022-04-30 18:37:44 log.py | INFO | \ud83d\udcd6 http://www.itest.info\n2022-04-30 18:37:52 log.py | INFO | \ud83d\udc40 assertIn url: http://www.itest.info/.\n.82022-04-30 18:37:52 log.py | SUCCESS | generated html file: file:///D:\\mypro\\reports\\2022_04_30_18_37_29_result.html\n2022-04-30 18:37:52 log.py | SUCCESS | generated log file: file:///D:\\mypro\\reports\\seldom_log.log\n```\n\n4\u3001\u67e5\u770b\u62a5\u544a\n\n\u4f60\u53ef\u4ee5\u5230 `mypro\\reports\\` \u76ee\u5f55\u67e5\u770b\u6d4b\u8bd5\u62a5\u544a\u3002\n\n![test report](./test_report.png)\n\n## \ud83d\udd2c Demo\n\n> seldom\u7ee7\u627funittest\u5355\u5143\u6d4b\u8bd5\u6846\u67b6\uff0c\u5b8c\u5168\u9075\u5faaunittest\u7f16\u5199\u7528\u4f8b\u89c4\u8303\u3002\n\n[demo](/demo) \u63d0\u4f9b\u4e86\u4e30\u5bcc\u5b9e\u4f8b\uff0c\u5e2e\u4f60\u5feb\u901f\u4e86\u89e3seldom\u7684\u7528\u6cd5\u3002\n\n### Web UI \u6d4b\u8bd5\n\n```python\nimport seldom\nfrom seldom import Steps\n\n\nclass BaiduTest(seldom.TestCase):\n\n def test_case_one(self):\n \"\"\"a simple test case \"\"\"\n self.open(\"https://www.baidu.com\")\n self.type(id_=\"kw\", text=\"seldom\")\n self.click(css=\"#su\")\n self.assertTitle(\"seldom_\u767e\u5ea6\u641c\u7d22\")\n\n def test_case_two(self):\n \"\"\"method chaining \"\"\"\n Steps().open(\"https://www.baidu.com\").find(\"#kw\").type(\"seldom\").find(\"#su\").click()\n self.assertTitle(\"seldom_\u767e\u5ea6\u641c\u7d22\")\n\n\nif __name__ == '__main__':\n seldom.main(browser=\"chrome\")\n```\n\n__\u8bf4\u660e\uff1a__\n\n* `seldom.main()` \u901a\u8fc7 `browser` \u6307\u5b9a\u8fd0\u884c\u7684\u6d4f\u89c8\u5668\u3002\n\n### HTTP \u6d4b\u8bd5\n\nseldom 2.0 \u652f\u6301HTTP\u6d4b\u8bd5\n\n```python\nimport seldom\n\n\nclass TestRequest(seldom.TestCase):\n\n def test_put_method(self):\n self.put('/put', data={'key': 'value'})\n self.assertStatusCode(200)\n\n def test_post_method(self):\n self.post('/post', data={'key': 'value'})\n self.assertStatusCode(200)\n\n def test_get_method(self):\n payload = {'key1': 'value1', 'key2': 'value2'}\n self.get(\"/get\", params=payload)\n self.assertStatusCode(200)\n\n def test_delete_method(self):\n self.delete('/delete')\n self.assertStatusCode(200)\n\n\nif __name__ == '__main__':\n seldom.main(base_url=\"http://httpbin.org\")\n```\n\n__\u8bf4\u660e\uff1a__\n\n* `seldom.main()` \u901a\u8fc7 `base_url` \u6307\u5b9a\u63a5\u53e3\u9879\u76ee\u57fa\u672cURL\u5730\u5740\u3002\n\n### App \u6d4b\u8bd5\n\nseldom 3.0 \u652f\u6301App\u6d4b\u8bd5\n\n```python\nimport seldom\nfrom seldom.appium_lab.keyboard import KeyEvent\nfrom seldom.appium_lab.android import UiAutomator2Options\n\n\nclass TestBingApp(seldom.TestCase):\n\n def start(self):\n self.ke = KeyEvent(self.driver)\n\n def test_bing_search(self):\n \"\"\"\n test bing App search\n \"\"\"\n self.sleep(2)\n self.click(id_=\"com.microsoft.bing:id/sa_hp_header_search_box\")\n self.type(id_=\"com.microsoft.bing:id/sapphire_search_header_input\", text=\"seldomQA\")\n self.ke.press_key(\"ENTER\")\n self.sleep(1)\n elem = self.get_elements(xpath='//android.widget.TextView')\n self.assertIn(\"seldom\", elem[0].text.lower())\n\n\nif __name__ == '__main__':\n capabilities = {\n 'deviceName': 'ELS-AN00',\n 'automationName': 'UiAutomator2',\n 'platformName': 'Android',\n 'appPackage': 'com.microsoft.bing',\n 'appActivity': 'com.microsoft.sapphire.app.main.MainSapphireActivity',\n 'noReset': True,\n }\n options = UiAutomator2Options().load_capabilities(capabilities)\n seldom.main(app_server=\"http://127.0.0.1:4723\", app_info=options, debug=True)\n```\n\n__\u8bf4\u660e\uff1a__\n\n* `seldom.main()` \u901a\u8fc7 `app_info` \u6307\u5b9aApp\u4fe1\u606f\uff1b `app_server` \u6307\u5b9aappium server \u5730\u5740\u3002\n\n## \ud83d\udcd6 Document\n\n[\u4e2d\u6587\u6587\u6863](https://seldomqa.github.io/)\n\n### \u9879\u76ee\u5b9e\u4f8b\n\n\u57fa\u4e8eseldom\u7684web UI\u81ea\u52a8\u5316\u9879\u76ee\uff1a\n\nhttps://github.com/SeldomQA/seldom-web-testing\n\n\u57fa\u4e8eseldom\u7684\u63a5\u53e3\u81ea\u52a8\u5316\u9879\u76ee:\n\nhttps://github.com/defnngj/seldom-api-testing\n\n## \u5fae\u4fe1\uff08WeChat\uff09\n\n> \u76f8\u5173\u4e66\u7c4d\u63a8\u8350\uff0c \u57fa\u4e8e SeldomQA \u76f8\u5173\u5f00\u6e90\u9879\u76ee\uff0c\u866b\u5e08 \u7f16\u8457\u3002\n\n<p>\n <a href=\"https://item.jd.com/14859108.html\">\n <img alt=\"\u4eac\u4e1c\u94fe\u63a5\" src=\"book.jpg\" style=\"width: 220px; margin-right: 140px;\" />\n </a>\n</p>\n\n> \u6b22\u8fce\u6dfb\u52a0\u5fae\u4fe1\uff0c\u4ea4\u6d41\u548c\u53cd\u9988\u95ee\u9898\u3002\n\n<div style=\"display: flex;justify-content: space-between;width: 100%\">\n <p><img alt=\"\u5fae\u4fe1\" src=\"wechat.jpg\" style=\"width: 200px;height: 100%\" ></p>\n</div>\n\n### Star History\n\n![Star History Chart](https://api.star-history.com/svg?repos=SeldomQA/seldom&type=Date)\n\n### \u611f\u8c22\n\n\u611f\u8c22\u4ece\u4ee5\u4e0b\u9879\u76ee\u4e2d\u5f97\u5230\u601d\u8def\u548c\u5e2e\u52a9\u3002\n\n* [parameterized](https://github.com/wolever/parameterized)\n\n* [utx](https://github.com/jianbing/utx)\n\n### \u8d21\u732e\u8005\n\n<a href=\"https://github.com/SeldomQA/seldom/graphs/contributors\">\n <img src=\"https://contrib.rocks/image?repo=SeldomQA/seldom\" />\n</a>\n\n### \u4ea4\u6d41\n\nQQ\u7fa4\uff1a948994709\n\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "Seldom automation testing framework based on unittest.",
"version": "3.11.0",
"project_urls": {
"Documentation": "https://seldomqa.github.io",
"Homepage": "https://seldomqa.github.io",
"Repository": "https://github.com/SeldomQA/seldom"
},
"split_keywords": [
"sedom",
" selenium",
" appium",
" requests"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "279548ad3695c45932c8ddd8797fa46bf12068b385a3a3361af6fbfd11d80fc2",
"md5": "861c88fa601a197b33553c6c7f64d3a3",
"sha256": "2a873f4690463e4b00b7ae178d2ca1371af90ebb43914fca945360b6d7983f02"
},
"downloads": -1,
"filename": "seldom-3.11.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "861c88fa601a197b33553c6c7f64d3a3",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.8",
"size": 115275,
"upload_time": "2024-12-18T16:05:00",
"upload_time_iso_8601": "2024-12-18T16:05:00.417069Z",
"url": "https://files.pythonhosted.org/packages/27/95/48ad3695c45932c8ddd8797fa46bf12068b385a3a3361af6fbfd11d80fc2/seldom-3.11.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "82e32ec0d792a09b10bb1f65c955cddc9de1a06f5b8aa28649a7a54dd41b1157",
"md5": "6f42cdb85592a2076038bf0bfa4891e4",
"sha256": "c574bc73cc662fee32fb16409729685e885488d57d0cce99174bce0b85db27f3"
},
"downloads": -1,
"filename": "seldom-3.11.0.tar.gz",
"has_sig": false,
"md5_digest": "6f42cdb85592a2076038bf0bfa4891e4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.8",
"size": 94579,
"upload_time": "2024-12-18T16:05:03",
"upload_time_iso_8601": "2024-12-18T16:05:03.874167Z",
"url": "https://files.pythonhosted.org/packages/82/e3/2ec0d792a09b10bb1f65c955cddc9de1a06f5b8aa28649a7a54dd41b1157/seldom-3.11.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-12-18 16:05:03",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "SeldomQA",
"github_project": "seldom",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "Appium-Python-Client",
"specs": [
[
">=",
"3.1.0"
]
]
},
{
"name": "XTestRunner",
"specs": [
[
">=",
"1.7.2"
]
]
},
{
"name": "loguru",
"specs": [
[
">=",
"0.7.0"
]
]
},
{
"name": "openpyxl",
"specs": [
[
">=",
"3.0.3"
]
]
},
{
"name": "pyyaml",
"specs": [
[
">=",
"6.0"
]
]
},
{
"name": "requests",
"specs": [
[
">=",
"2.29"
]
]
},
{
"name": "jsonschema",
"specs": [
[
">=",
"4.10.0"
]
]
},
{
"name": "jmespath",
"specs": [
[
">=",
"0.10.0"
]
]
},
{
"name": "pymysql",
"specs": [
[
">=",
"1.0.0"
]
]
},
{
"name": "genson",
"specs": [
[
"==",
"1.2.2"
]
]
},
{
"name": "click",
"specs": [
[
"~=",
"8.1.3"
]
]
},
{
"name": "python-dateutil",
"specs": [
[
"==",
"2.8.2"
]
]
},
{
"name": "websocket-client",
"specs": [
[
"==",
"1.7.0"
]
]
}
],
"lcname": "seldom"
}