Package: xiaobaisaf
simlpe_automation_framework介绍simple_automation_framework(简称：SAF)
使用最简单的模式就可以实现需要功能和测试效果，也是xiaobaiauto2的简化版
SAF继承了selenium、requests/httpx、appium、loguru、xiaobaiauto2、飞书机器人、钉钉机器人、企业微信机器人（暂时不支持）、禅道提单API软件架构xiaobaiauto2的简化版版本注意建议使用Python 3.9.* 版本
建议selenium >=4.16.0 支持代码自动执行无需关注浏览器驱动问题，可以自行下载
防止某些库出现不兼容问题，导致功能不可使用安装教程pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple   注：将pip源修改为国内源
pip install xiaobaisaf使用说明优先修改saf/data/config.py中飞书/钉钉的webhook# filename=config.pyclassfeishu(object):@staticmethoddefwebhook():return'https://open.feishu.cn/open-apis/bot/v2/hook/xxxx'classdingding(object):@staticmethoddefwebhook():return'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx'conftest.py（保持此文件与用例文件在同目录下）# filename = conftest.pyfromsaf.utils.SendMsgUtilsimportrobotSendMessageimportpytest@pytest.mark.hookwrapperdefpytest_runtest_makereport(item):""":param item:"""outcome=yieldreport=outcome.get_result()ifreport.outcome=='failed':# 调用机器人发送执行结果robotSendMessage(robot_name='feishu',msg=f'测试脚本：{report.nodeid.split("::")[0]}\n测试用例：{report.nodeid.split("::")[1]}\n测试结果：{report.outcome}')# robotSendMessage(robot_name='dingding', msg=f'测试脚本：{report.nodeid.split("::")[0]}\n测试用例：{report.nodeid.split("::")[1]}\n测试结果：{report.outcome}')# robotSendMessage(robot_name='feishu,dingding', msg=f'测试脚本：{report.nodeid.split("::")[0]}\n测试用例：{report.nodeid.split("::")[1]}\n测试结果：{report.outcome}')用例文件# fielname = test_xiaobai_testcase.pydefsetup_module():''' 用例脚本执行之前需要准备的信息 '''...defteardown_module():''' 用例脚本执行之后需要清除的信息 '''defsetup_function():''' 初始化测试用例执行之前状态信息 '''...defteardown_function():''' 清除测试用例执行之后所产生的信息 '''...deftest_yewu_name_a():''' 用例函数需要针对业务场景的测试步骤的实现1、UI测试就是定位需要操作的界面节点然后执行操作2、API测试就是执行相关接口实现接口的功能需要针对每次的结果添加断言进行判断处理'''deftest_yewu_name_b():''' 用例函数需要针对业务场景的测试步骤的实现1、UI测试就是定位需要操作的界面节点然后执行操作2、API测试就是执行相关接口实现接口的功能需要针对每次的结果添加断言进行判断处理'''# filename = test_xiaobai_allure.py# JDK与Allure已安装且配置好环境变量（若不知道可以查看公众号：小白科技之窗）importpytestimportallure@allure.feature('下单')classTest_order():@allure.story('登录')deftest_login(self):''' 登录 '''withallure.step('输入账户'):assertTruewithallure.step('输入密码'):assertTruewithallure.step('点击登录'):assertTrue@allure.story('搜索商品')deftest_search(self):''' 搜索商品 '''withallure.step('搜索框输入：苹果'):assertTruewithallure.step('点击搜索按钮'):assertFalse'''# 执行脚本pytest test_xiaobai_allure.py --alluredir=../data# 打开报告allure serve ../data或者allure generate -c -o ../report ../dataallure open ../report'''saf>1.1 使用禅道API，测试失败自动提单需要在禅道后台>>二次开发>>应用>>添加应用>>创建开启免密的应用需要将上一步所生成数据【代号】与【密钥】写入到saf/data/config.py中zenTao相关的参数位置# filename = saf/data/config.pyimporthashlibimporttimeclasszenTao(object):'''参考禅道接口文档：https://www.zentao.net/book/zentaopmshelp/integration-287.html'''@staticmethoddefbaseURL():''' 禅道的根路径 '''return'http://192.168.0.240/zentao'@staticmethoddefaccount():''' 后台-》二次开发-》应用-》免密登录的账户名 '''return'开启密钥的账户名称，例如管理员：admin'@staticmethoddefgetCode():''' 后台-》二次开发-》应用-》创建-》代号 '''return'复制生成应用的代号字符串'@staticmethoddefgetKey():''' 后台-》二次开发-》应用-》创建-》密钥 '''return'复制生成应用的密钥字符串'@staticmethoddefgetTime():''' 获取时间戳 ，默认即可，无需修改'''returnint(time.time())@staticmethoddefgetToken():''' 获取token： md5($code + $key + $time) ，默认即可，无需修改'''_md5=hashlib.md5(f'{zenTao.getCode()}{zenTao.getKey()}{zenTao.getTime()}'.encode('utf-8'))return_md5.hexdigest()用例同目录下创建conftest.pypytest的配置文件# filename = conftest.pyfromsaf.utils.BugUtilsimportaddZenTaoBUGimportpytest@pytest.mark.hookwrapperdefpytest_runtest_makereport(item,call):""":param item:"""outcome=yieldreport=outcome.get_result()ifreport.outcome=='failed':doc=item.function.__doc__doc=str(doc).replace('\n','<br>')addZenTaoBUG(title=item.function.__name__,steps=f'{doc}预期结果：passed<br>测试结果：{report.outcome}')用例文件正常编写，正常运行即可saf>1.0 拷贝web自动化模板到D:\autoProject目录下xiaobaicmd -t web -d D:\autoProject
xiaobaicmd --template web --dirname D:\autoProject
xiaobaicmd -t api -d D:\autoProject
xiaobaicmd --template api --dirname D:\autoProject
xiaobaicmd -t app -d D:\autoProject[暂时不支持]saf>1.3 新增pytest参数多种样例，web中包含# filename = test_xiaobai_case_v2.pyimportpytestfromsafimportfull_load''' 参数化 '''data2={'test_login':{'keys':'username, password, _assert','values':[('xiaobai','12345',200),('xiaohui','1234567',200)]}}data3=full_load(open('..\\data\\testCase.yaml','r').read())# 内部数据@pytest.mark.parametrize('username, password, _assert',[('xiaobai','12345',200),('xiaohui','1234567',200)])deftest_xiaobai_login1(username,password,_assert):# 业务实现代码assert_assert==200# 外部数据@pytest.mark.parametrize(data2['test_login']['keys'],data2['test_login']['values'])deftest_xiaobai_login2(username,password,_assert):# 业务实现代码assert_assert==200# 外部文件数据@pytest.mark.parametrize(data3['test_login']['keys'],[eval(v)forvindata3['test_login']['values']])deftest_xiaobai_login3(username,password,_assert):# 业务实现代码assert_assert==200# filename = ..\\data\\testCase.yaml---test_login:keys:username,password,_assertvalues:-('xiaobai', '12346', 200)-('xiaohui', '123456', 200)saf>1.8 工具会自动在当前目录下生成target文件夹，target目录内容与web模板保持一致，页面对象代码在PageObjects目录下xiaobaicmd -u https://www.baidu.com 
xiaobaicmd --url https://www.baidu.comsaf>1.9  基于adb实现监控Android设备中APP操作时实时生成XPath表达式及坐标等数据xiaobaicmd -m gui             # 基于界面实时获取APP数据
xiaobaicmd --monitor gui      # 基于界面实时获取APP数据
xiaobaicmd -m cli             # 基于命令实时获取APP数据
xiaobaicmd --monitor cli      # 基于命令实时获取APP数据saf>2.0   基础adb实现Android设备的界面监控功能xiaobaicmd -e [1]   # 默认值为1，可省略；表示打开界面监控第一个设备的实时界面
xiaobaicmd --device 1saf>2.2   基础adb实现Android设备的电量监控功能xiaobaicmd -m power   # 界面监控设备的电量与内存使用率的实时界面
xiaobaicmd -m memory   # 界面监控设备的电量与内存使用率的实时界面saf>2.3.5 新增实时监控Android当前APP的CPU使用率及FPS数据xiaobaicmd -m guisaf>2.3.7 新增识别滑块验证码破解fromsaf.utils.CaptchaUtilsimportcheckSliderfromsafimportselenium_webdriver,Bydriver=selenium_webdriver.Chrome()driver.get("https://www.xiaobaisoftware.com")# 其它操作...# 定位目标图（小图）target_element=driver.find_element(By.XPATH,value='')# 定位背景图（大图）background_element=driver.find_element(By.XPATH,value='')# 定位滑块按钮button_element=driver.find_element(By.XPATH,value='')# 参数：浏览器驱动、目标元素、背景元素、滑块元素、失败重试（非必须，默认：False）、重试次数（非必须，默认：3）checkSlider(driver,target_element,background_element,button_element,True,5)saf>2.3.8 新增解析DNS并刷新DNS缓存，数据保存HOSTS# 执行脚本之前请修改系统hosts文件在当前用户下有可读可写的权限！
# windows的hosts文件路径：C:\Windows\System32\drivers\etc\hosts
# Mac OS的hosts文件路径 ：/private/etc/hosts
# Linux的hosts文件路径  ：/etc/hosts

# --domains 后面的域名使用逗号分离即可
xiaobaicmd --domains github.com,raw.githubusercontent.com,github.global.ssl.fastly.net,assets-cdn.github.comsaf>=2.5.0 新增小白软件管理工具，目前支持（安装、卸载、替换不同版本的）JMeter#命令行输入命令运行即可
xiaobaimanager环境检测[还未实现]xiaobaicmd  --init

检测内容: 
1、python版本及第三方库
2、第三方工具及环境参与贡献selenium官网文档requests官网文档appium官网loguru官方文档xiaobaiauto2帮助文档Allure帮助文档飞书机器人获取WebHook钉钉机器人获取WebHook163邮箱配置QQ邮箱配置更新日志versioninfo1.0基本实现web自动化模板功能1.1修复已知BUG1.2新增allure报告库及封装禅道提单接口1.3新增jira提单接口1.4新增pytest参数化样例1.5优化pytest样例内容1.6修复已知BUG1.7新增基础环境检测功能1.8新增API自动化模板1.9新增xiaobaicmd -u命令2.0新增xiaobaicmd -m命令2.1新增xiaobaicmd --device命令2.2修复已知BUG2.3新增实时监控Android设备耗电量2.3.1修复已知BUG2.3.2修复已知BUG2.3.3新增实时监控Android当前APP的内存使用率2.3.4新增xiaobaicmd -m gui效果展示2.3.5新增xiaobaicmd -u 转PO代码时xpath的表达式2.3.6新增实时监控Android当前APP的CPU使用率及FPS数据2.3.7新增识别滑块验证码破解2.3.8优化识别滑块验证码破解2.3.9新增解析DNS并刷新DNS缓存，数据保存HOSTS2.4修复已知BUG2.4.1优化DNS解析效果2.4.2优化自动生成代码2.4.3优化2.4.3.1优化2.4.3.2优化2.5.0添加xiaobaimanager命令2.5.1优化xiaobai