- 博客(61)
- 收藏
- 关注
原创 Python一键导入所有第三方库requirements
可以将现有项目的所有安装包记录在requirements.txt 文件, 再另一个环境下一键安装所有安装包。requirements.txt 文件,用于记录所有依赖包及其精确的版本号,以便在新环境中进行部署操作。通常我们在导入一个Python 项目中可能安装很多安装包, 再次创建虚拟环境是需要重新安装的话很麻烦也费时间, 或者项目部署的时候避免重装,那我们如何解决这个问题呢?
2023-09-04 11:59:16
271
转载 Fiddler抓包-只抓取APP请求【转载】
移动客户端项目有时需要针对手机app进行抓包,这时一般有两种办法:一是直接下个手机抓包工具的app,在手机上抓;二是pc机上装上抓包工具,pc和手机连接同一个无线,在pc机上抓。第一种比较简单,但抓包工具自然也不如后一种强大。这里只讲pc端抓包。pc端抓包目前感觉还是Fiddler方便好用。直接去官网【https://www.telerik.com/download/fiddler】上填完信息后下载安装包。下完后点击运行,很快就安装完。接下来比较关键,配置Fiddler:1、配置Fiddler监听ht
2022-03-10 10:30:56
1740
原创 元组类型数据转换为列表
a = (('5699461012b1cdb956f3bdf5df8cc472',), ('fcc2a2eec59209b14c1eb5a7435800dc',), ('6b43c9fe2dc3bd73bd051055a9e6dda0',), ('584d084095794d7c8ff3091305f67b6e',), ('4715e67cfbe736c85fa74f140f9e7a89',), ('8d0a6f074ad4578445e3f22303af67ef',))b = []
2022-03-07 16:05:46
1440
原创 通过python代码启动appium
通过python代码启动appium"""关于appium的启动1、桌面版(咱们现在用的):运行方式一:点击软件图标运行方式二:cmd命令行运行appium:appium的路径:C:\Users\Admin\AppData\Local\Programs\Appium\resources\app\node_modules\appium\build\lib①CD切换上的路径②dir(列出文件)③找到main.js后执行node main.js 参数 -p:
2022-02-28 09:40:54
1410
1
原创 Appium-混合应用、小程序启动
区分原生、H5打开手机手机开发者模式,同时打开手机系统设置-开发者选项-显示布局边边界----如果页面是整块,则为H5页面;如果页面标注一个个控件,则为原生Html5 webview元素定位工具的实现一、工具选择webview元素定位有三种方式:使用driver.page_source方法,将获取到的页面内容写入到一个html文件中,然后使用浏览器打开html文件,使用F12调试用具进行元素定位chrome浏览器自带的调试工具 Developer Tools,在chrome浏览器中输入
2022-02-16 18:13:36
1166
1
原创 Appium点击、滑动、多指触控操作
通过坐标进行点击:driver.tap()# 通过坐标进行点击,参数1:x,y坐标,参数2:持续时间driver.tap([(778, 986)], 500)滑动屏幕:driver.swipe()driver.swipe(start_x: 960, start_y: 800, end_x: 960, end_y: 300, duration: int = 0)# 坐标起始位置,坐标终止位置,持续时间以下为前程贷登陆操作,涉及到滑动操作from appium.webdriver import
2022-01-29 17:44:49
960
原创 Appium元素三大等待
一.隐式等待隐式等待是通过一定的时长等待页面上某元素加载完成。如果超出了设置的时长元素还没有加载完成,则会抛出NoSuchElementException的异常。一旦设置,隐式等待时间就会作用于这个webdriver实例的整个周期或者一次完整测试的执行周期,并且webdriver会使其对所有测试步骤中包含整个界面的元素的查找时都有效,除非把默认时间设置回0。webdriver提供了implicitly_wait()方法来实现隐式等待,默认参数是以秒为单位。如下实例:driver.implicitly
2022-01-29 17:09:27
751
原创 Appium元素定位
元素定位第一种:android ADT自带的工具:uiautomatorviewer.bat注意点:对安卓9、安卓9的支持不太友好第二种:appium自带的检查器第三种:Python版UIAutomator2中的weditor安装:pip install uiautomator2安装定位工具:pip install weditor初始化:python -m uiautomator2 init注意点:安装失败时,加上-i换国际源-i https://pypi.tuna.tsinghu
2022-01-29 16:40:41
615
原创 Appium---环境安装、使用流程、启动app、adb命令
一、appium环境安装1、安装appiumappium桌面程序(下载安装包安装)windows中如果提示缺少Microsoft.NET Framework,则安装nte4.5.1.exe2、安装java JDKJDK1.8以上3、安装android的SDK环境①添加ANDROID_HOME环境变量,配置sdk根目录,不能有中文②在系统环境变量PATH变量中添加三项内容%ANDROID_HOME%\platform-tools%ANDROID_HOME%\tools%ANDROID
2022-01-27 17:09:45
1884
原创 Jenkins的分布式构建及部署——节点
一 、什么是Jenkins的分布式构建和部署Jenkins的分布式构建,在Jenkins的配置中叫做节点,分布式构建能够让同一套代码或项目在不同的环境(如:Windows和Linux系统)中编译、部署等。二 、什么时候使用节点和作用当我们使用多台服务器时,并且配置了tomcat或jboss集群服务,可通过jenkins的节点配置,将jenkins项目发布在不同服务器上(分布jenkins工作空间,部署项目到不同服务器的tomcat或jboss),这就形成了jenkins的分布式。节点服务器不需要安装j
2022-01-21 10:37:57
811
原创 allure测试报告+Jenkins集成
前提:得装了jdk1.8allure测试报告的样子是这样的,它能显示你运行了几次,然后每次运行有多少次成功多少次失败,之前的和现在的下载地址:链接:https://pan.baidu.com/s/1bG0a0DYxBoUpHtWM3M4n_g提取码:qtv8将文件减压,然后把bin文件目录下的allure.bat的路径放到系统环境变量的path里然后cmd 运行allure 命令,显示这样算成功与pytest集成需要安装一个叫做 pytest-allure的插件库命令:pip Ins
2022-01-21 10:31:27
108
原创 Selenium--PageObject模式的详细介绍
前言在UI自动化测试中,PO是目前最为主流,也是公认最佳的设计模式UI自动化测试最初是通过关键字驱动+数据驱动的形式来实现,然后升级到PO模式什么是关键字驱动简单而言,就是将Selenium常用功能进行二次封装譬如:把查找元素、点击、输入等原生方法进行封装特点:可以让不懂代码的测试人员也能做自动化测试,彻底地实现测试步骤、测试数据和程序的分离关键字驱动 vs RF可以把关键字驱动对比用RF(Robot Framework)做的自动化测试,在RF GUI界面调用关键字,并传入参数即可
2022-01-11 16:09:08
513
原创 Web自动化之上传文件
第一种:通过元素的input属性:driver = webdriver.Chrome()driver.get('https://www.layui.com/demo/upload.html')# 方式一:找到对应的input标签,直接使用send_keys输入文件路径input_ele = driver.find_elements_by_xpath('//button[@id="test1"]/../input')input_ele.send_keys(r'C:\images\1.gif')
2022-01-10 15:09:28
828
原创 Web自动化之selenium鼠标键盘操作以及JS操作
一、鼠标操作from selenium.webdriver import ActionChainsActionChains:鼠标操作类①click:鼠标左击②double_click:鼠标双击③content_click:鼠标右击④move_to_element:鼠标移动到某个节点⑤click_and_hold:鼠标左键按下鼠标⑥move_by_offse:鼠标相对当前位置进行移动⑦grag_and_drop():在一个位置按下鼠标,到另一个位置释放release:释放鼠标perf
2022-01-05 11:26:48
1402
原创 Web自动化之元素等待和iframe切换
定位表达式在浏览器上能够定位到,放到代码中定位不到的原因:1、网页内容未加载完,就去找元素,导致找不到解决方案:加等待等待方式:1、强制等待:time.sleep(2):代码强制等待2s中后再往下继续运行2、隐式等待:通过driver.implicitly_wait()方法设置隐式等待的时间,设置一次对driver的整个生命周期生效。等待元素出现再往下执行,如果元素超过了设置的最大等待时间还未出现会报错:等待超时。注:隐式等待的作用域是全局,所以一般设置在整局代码的头几行。3、显示等待
2022-01-04 19:19:50
982
原创 Web自动化之selenium元素定位方式
Selenium基本操作:1、环境安装• selenium的安装pip install selenium• 浏览器对应的ChromeDriver驱动①Chromedriver所有版本下载链接:https://chromedriver.storage.googleapis.com/index.html②将chromedriver.exe放到python安装路径下-----------------------------driver对象的方法---------------------------
2021-12-30 16:34:56
503
原创 Web自动化之JS基本操作
前端开发最基本的三个要素:1、HTML:页面结构:可以把他看成一个文档,定义展示页面的内容结构。2、CSS:页面表现:元素大小、颜色位置、隐藏或显示,部分动画效果。3、JavaScript:页面行为:部分动画效果,页面与用户的交互,页面功能。JS操作页面1、定位元素:2、修改元素:• 获取元素属性值var ele = document.getElementById(“test”).value;• 给元素的属性赋值document.getElementById(“test”).value
2021-12-28 11:29:05
772
原创 Pytest参数化parametrize
1、传入单个参数pytest.mark.parametrize(argnames,argvalues)argnames:参数名 argvalues:参数对应的值,类型必须为可迭代类型,一般为 listimport pytestlists = ['python', 'java', 'c++', 'ruby']class Test01(): @pytest.mark.parametrize('item', lists) def test_001(self, item):
2021-12-27 14:44:10
528
原创 Pytest中allure测试报告
pip install pytest-html①第一种:log普通文本:TextTestRunner– resultlog=report/demo.txt 相对路径②第二种:xml,生成xml文件–junitxml=report/demo.xml #jenkins使用html和xml标记性语言③第三种:html HTMLTestRunner–html=report/demo.html④第四种:allure:集成allure报告平台allure是一个通用的测试报告的框架,python、ja
2021-12-27 14:25:56
323
原创 Pytest中assert断言详细使用
前言• 与unittest不同,pytest使用的是python自带的assert关键字来进行断言• assert关键字后面可以接一个表达式,只要表达式的最终结果为True,那么断言通过,用例执行成功,否则用例执行失败assert小栗子想在抛出异常之后输出一些提示信息,执行之后就方便查看是什么原因了# 异常信息def f(): return 3def test_function(): a = f() assert a % 2 == 0, "判断 a 为偶数,当前 a 的
2021-12-27 13:59:14
947
原创 Pytest中skip、skipif跳过用例
前言• pytest.mark.skip 可以标记无法在某些平台上运行的测试功能,或者您希望失败的测试功能• 希望满足某些条件才执行某些测试用例,否则pytest会跳过运行该测试用例• 实际常见场景:跳过非Windows平台上的仅Windows测试,或者跳过依赖于当前不可用的外部资源(例如数据库)的测试@pytest.mark.skip跳过执行测试用例,有可选参数reason:跳过的原因,会在执行结果中打印import pytest@pytest.fixture(autouse=True
2021-12-27 13:46:59
289
原创 Pytest用例打标签
用例打标签:pytest.mark1、在pytest.ini文件中markers这个配置项注册标签# pytest.ini[pytest]markers= smoke:冒烟测试 #冒号后面是标签的描述,可不填 huigui:回归测试2、①通过pytest.mark.标签名给单个用例加一条或多条标签import pytestclass TestClass(): @pytest.mark.smoke @pytest.mark.huigui d
2021-12-27 11:38:39
952
原创 Pytest自定义用例顺序
Unittest用例执行顺序unittest框架和pytest框架编写的测试用例执行顺序,默认根据ACSII码的顺序加载测试用例,数字与字母的顺序为:09,AZ,a~z。1.对于类来说,class TestAxx 会优先于class TestBxx被执行。2.对于方法来说,test_aaa()方法会有优先于test_bbb()被执行。对于测试目录与测试文件来说,unittest同样是按照这个规则来加载测试用例的。背景:我们写接口测试用例的时候,可以按上下接口顺序给它命名test_01…test_
2021-12-27 10:38:03
525
原创 Pytest中fixture夹具
Unittest和Pytest前后置区别这里抽用例前置与后置的区别来讲,先看unittest的前后置使用:import unittestclass TestFixtures01(unittest.TestCase): # 所有用例执行前执行 def setUp(self) -> None: print("setUp开始") def tearDown(self) -> None: print("tearDown结束") #.
2021-12-24 17:06:18
767
原创 Pytest编写用例规范
--------------------------------Pytest编写用例------------------------------------①用例文件:test开头②以test开头的函数会当成一条测试用例③以Test开头的类会当成测试用例类测试类中,以test开头的方法,会当成一条测试用例Pytest配置文件:执行pytest时会根据pytest.ini中定义规则来执行用例自定义pytest识别用例规则:在run.py文件同级目录中新建pytest.ini[pytest]py
2021-12-24 16:37:48
535
原创 python中mock的基本使用
什么是mock?mock在翻译过来有模拟的意思。这里要介绍的mock是辅助单元测试的一个模块。它允许您用模拟对象替换您的系统的部分,并对它们已使用的方式进行断言。在Python2.x 中 mock是一个单独模块,需要单独安装。pip install -U mock在Python3.x中,mock已经被集成到了unittest单元测试框架中,所以,可以直接使用。可能你和我初次接触这个概念的时候会有这样的疑问:把要测的东西都模拟掉了还测试什么呢?但在,实际生产中的项目是非常复杂的,对其进行单元测
2021-12-23 16:28:44
1163
原创 Jenkins配置自动发送邮件
1.开通QQ的SMTP服务,需要发一条短信,qq会给你一个密码(不是你的QQ邮箱密码哦)2.安装 Email Extension Plugin 插件3.进入系统管理–系统设置3.1按照如下图设置首先找到 Extended E-mail Notification然后按照下图设置587端口我试了不行,还是用465吧。3.2然后找到 邮件通知 并按照如下设置3.3最后必须设置 Jenkins Location 如下图上面只是配置邮件服务器地址、账号和密码,但是jenkins不知道采用哪
2021-12-23 10:32:49
201
原创 Jenkins显示html样式问题的几种解决方案总结
前言jenkins上使用HTML Publisher plugin插件生成的html报告样式会丢失,需要设置下才能正常显示。一、样式丢失1.官方文档的解释如下,参考地址https://stackoverflow.com/questions/35783964/jenkins-html-publisher-plugin-no-css-is-displayed-when-report-is-viewed-in-j从安全性考虑,禁止了css和js的加载,所以无法展示。This rule set resul
2021-12-23 10:26:22
1296
原创 Jenkins配置定时任务
1、点击任务后,点击配置2、选择”构建触发器“下面的”定时构建“,并设定定时规则。设置完成后,构建任务就会按照我们设置的时间定时执行了。3、设定规则此处定时任务的格式遵循 cron 的语法(可以与 cron 的语法有轻微的差异)。具体格式,每行包含5个字段,依次为分钟、小时、日、月、星期几,并通过 Tab 或空格分隔。如下图中示例的“每隔15分钟执行一次”为:H/15 * * * *4、其他常用的规则每天下午18点定时构建一次 : H 18 * * * 每天上午12点
2021-12-23 09:49:16
1706
原创 jenkins安装详细教程
Jenkins简介Jenkins是一个开源的软件项目,是基于java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。1.持续的软件版本发布/测试项目2.监控外部调用执行的工作最近一直在研究/学习自动化测试,所以想使用jenkins来集成我的测试项目,所以想学学jenks如是来集成管理项目及发布项目,也希望有经验的同学多多指点,共同进步!废话不多说先准备安装Jenkins环境准备1.安装jenkins前确保您的电脑已经配置好JDKJDK下
2021-12-23 09:42:07
14085
原创 项目开展接口自动化考虑点
项目开展接口自动化:一、可行性分析:项目适不适合:1、项目是否频繁迭代2、项目的开发模式:①前后端不分离的项目:接口对于业务覆盖率不高②前后端分离(主流)的项目:按基本上所有的业务都能覆盖测试团队的人员:二、如何下手、怎么开展?1、接口文档:找开发或者抓包:参数不全,每个参数什么意思不清楚2、工具测试接口3、进行优先级划分:①核心的接口(主流程)②其他稳定的接口③不是特别好覆盖用例(放到最后有时间再去加)三、技术选型:1、通过工具去做(postman,jmeter)2、通
2021-12-22 16:59:26
579
原创 接口关联-时间戳+token+加密(验证)封装
接口关联采用:时间戳+token+加密(验证)import base64from time import time# 需要安装rsa模块, pip install rsaimport rsaclass HandleSign: server_pub = """ -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQENQujkLfZfc5Tu9Z1LprzedE O3F7gs+7bz
2021-12-22 16:43:57
1102
原创 unittest生成报告发送到邮箱或钉钉
import unittestfrom unittestreport import TestRunnerimport osfrom commons.handle_path import REPORTS_DIR,TESTCASSE_DIRfrom unittestreport.core.sendEmail import SendEmailclass RunTest: def main(self): suite=unittest.defaultTestLoader.disc
2021-12-22 16:38:54
389
原创 python自动化之投资接口用例及前面常用类封装
管理员登陆、普通用户登陆、添加项目、审核可以封装起来,后续测试用例类中会频繁调用,导致代码冗余。# fixtureimport requestsfrom jsonpath import jsonpathfrom common.handle_conf import confclass BaseTest: @classmethod def admin_login(cls): '''---------------管理员登陆-----------------'''
2021-12-21 15:45:33
92
原创 python自动化之审核接口用例
审核接口用例import unittestimport osimport requestsfrom unittestreport import ddt, list_datafrom common.handle_excel import HandleExcelfrom common.handle_path import DATA_DIRfrom common.handle_conf import conffrom common.tools import replace_datafrom co
2021-12-20 14:14:39
687
原创 python自动化之添加项目测试用例
添加项目测试用例:import unittestimport osimport requestsfrom unittestreport import ddt, list_datafrom common.handle_excel import HandleExcelfrom common.handle_path import DATA_DIRfrom common.handle_conf import conffrom common.tools import replace_datafrom
2021-12-20 11:22:11
2760
原创 python自动化之封装获取配置文件
封装获取配置文件:# config.ini[logging]name = zangailevel = DEBUGfilename = testlog.logsh_level = DEBUGfh_level = INFO[env]base_url = http://api.dsad.site:8000[test_data]username = password = [invest_user]mobile= pwd= [test_admin]mobile= pwd=[m
2021-12-20 11:19:30
1559
原创 python自动化之封装文件路径
封装文件路径:import os# 获取根目录文件BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# 获取测试数据文件路径TESTCASSE_DIR = os.path.join(BASE_DIR, 'testcase')# 获取测试用例文件路径DATAS_DIR = os.path.join(BASE_DIR, 'datas')# 获取配置文件路径CONF_DIR = os.path.join(B
2021-12-20 11:14:19
1186
原创 python 替换字符串最后一位
#字符串string="6123456"#替换最后一位6string.[::-1].replace('6','', 1)[::-1]
2021-12-16 22:04:55
2661
原创 正则表达式及运用
替换数据中的数据:①原始替换方式存在问题:用例中每个需要替换的参数都要调一次replace方法class Test01: id = 10 name = 'tony' data = '0011' title = 'OK'Params = "{'id': '#id#', 'name': '#name#', 'data': '#data#', 'title': '#title#', 'aaa': 111}"Params = Params.replace('#id#',
2021-12-15 15:36:33
2572
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人