- 博客(31)
- 收藏
- 关注
原创 面试题-网上整理的面经
滴滴面经查看进程ps -aux网络命令netstat怎么提取某个以.tex结尾的文件,或者是以xxx结尾的find . -name “*.text”性能测试都测哪些指标响应时间(最大响应时间、最小响应时间、中位数响应时间、90%响应时间)并发数TPS,TPS=并发数/平均响应时间出错率内存(top命令)CPU(top命令)服务器负载(top、uptime)磁盘IO(iostat)网络(netstat)Linux命令 如何查看端口号netstat - atulnp会显示
2021-11-21 19:12:25
1173
原创 android webview测试
多架构支持纯webview纯webview测试(只测试浏览器)的环境准备手机端被测浏览器:(不可以是第三方浏览器)safari for ios and chrome,chromium,or browser for AndroidPC端安装chrome浏览器或者chromium,并且能登录 https://www.google.com/下载对应手机浏览器对应的driver– 国内镜像地址:https://npm.taobao.org/mirrors/chromedriver/– ap
2021-05-20 20:45:32
640
原创 appium属性获取与断言
hamcrest框架介绍hamcrest是一个为了测试为目的,能组合成灵活表达式的匹配器类库。用于编写断言的框架,使用这个框架编写断言,提高可读性及开发测试的效率hamcrest提供了大量被称为“匹配器”的方法。每个匹配器都设计用于执行特定的比较操作hamcrest的可扩展性强,让你能够创建自定义的匹配器支持多种语言文档:http://github.com/hamcrest/PyHamcrest...
2021-05-20 20:01:56
274
原创 appium-toast控件识别
toast介绍toast:简易的消息提示框为了给当前视图显示一个浮动的显示块,与dialog不同,它永远不会获得焦点Toast类的思想:尽可能不引人注意,同时还向用户显示信息希望他们看到Toast显示的时间有限,Toast会根据用户设置的显示时间后自动消失Toast本身是个系统级别的控件,它归属于系统settings,当一个app发送消息的时候,不是自己造出来的这个弹框,它是发给系统,由系统统一进行弹框,这类的控件不在app内,需要特殊的控件识别方法toast定位appium使用uiau
2021-05-18 19:21:15
218
原创 appium-显式等待
显式等待显示等待可以等待动态加载的ajax元素,显式等待需要使用ExpectedConditions来检查条件一般页面上元素的呈现title出现:首先出现titledom树出现:presence,还不完整css出现:可见visibilityjs出现:js特效执行,可点击clickablehtml文档是自上而下加载的js文件加载会阻碍html内容的加载,有些JS异步加载的方式来完成js的加载样式表下载完成之后会跟之前的样式表一起进行解析,会对之前的元素重新渲染例子import ti
2021-05-18 18:15:19
355
原创 appium-高阶用法
Xpath定位进阶层级定位父结点定位子节点子节点定位父节点子节点定位兄弟节点爷爷节点定位孙子节点例子import timefrom appium import webdriverfrom appium.webdriver.common.touch_action import TouchActionclass TestElementOperator: def setup(self): desired_caps = {} desired_ca
2021-05-17 20:39:00
365
原创 Appium-TouchAction
文档:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/touch-actions.md操作press 按release 释放moveTo 移动到tap 点wait 等待longPress 长按cancel 取消perform例子-页面滑动import timefrom appium import webdriverfrom appium.webdriver.common.t
2021-05-12 12:37:57
119
原创 appium-元素的常用方法
元素的常用方法点击方法 element.click()输入操作 element.send_keys(‘appium’)设置元素的值 element.set_value(‘appium’)清除操作 element.clear()是否可见 element.is_displayed() 返回True/False是否可用 element.is_enabled() 返回True/False是否被选中 element.is_selected() 返回True/False获取属性值 get_attrib
2021-05-11 20:29:52
189
原创 Android&IOS基础知识
Android基础知识Android是通过容器的布局属性来管理子控件的位置关系,布局过程就是把界面上的所有的控件根据他们的间距的大小,摆放在正确的位置布局是一种可用于放置很多控件的容器,它可以按照一定的规律调整内部控件的位置,从而编写出精美的界面。当然,布局的内部除了放置控件外,也可以放置布局,通过多层布局的嵌套,我们就能够完成一些比较复杂的界面Android七大布局LinearLayout(线性布局)RelativeLayout(相对布局)FrameLayout(帧布局)Absolut
2021-05-08 19:24:59
187
原创 appium元素定位
id定位driver.find_element_by_id(resource-id)accessibility_id定位driver.find_element_by_accessibility_id(content-desc)xpath定位driver.find_element_by_xpath(‘xpath属性’)classname定位(不推荐)
2021-05-08 19:21:16
63
原创 appium-Capability设置
app apk地址app Package 包名appActivity Activity名字automationNanme 默认使用uiautomator2(android默认使用uiautomator2,ios默认使用XCUITest)noReset fullReset 是否在测试前后重置相关环境(例如首次打开弹框,或者是登录信息)unicodeKeyBoard resetKeyBoard 是否需要输入非英文之外的语言并在测试完成后重置输入法官方文档:https://github.com/app
2021-04-30 10:08:50
85
原创 appium-获取app信息
appiumappium是一个移动端的自动化测试框架,可用于测试原生应用,移动网页应用和混合应用,且是跨平台的(何为跨平台,意思是可以针对不同平台用一套api来编写脚本)。可用于iOS和Android操作系统。原生应用是指用Android或IOS编写的应用,移动网页应用是指网页应用。混合应用是指一种包裹webview的应用,原生应用网页内容交互性的应用。跨语言跨平台Android、IOSWindows、Mac底层多引擎可切换生态丰富,社区强大appium生态工具adb:android的
2021-04-30 09:45:46
133
原创 appium介绍
appium介绍appium是一个移动端的自动化测试框架,可用于测试原生应用,移动网页应用和混合应用,且是跨平台的(何为跨平台,意思是可以针对不同平台用一套api来编写脚本)。可用于iOS和Android操作系统。原生应用是指用Android或IOS编写的应用,移动网页应用是指网页应用。混合应用是指一种包裹webview的应用,原生应用网页内容交互性的应用。跨语言跨平台:Android、IOS、Windows、Mac底层多引擎可切换生态丰富,社区强大appium引擎列表appium的设计
2021-04-28 20:37:45
214
原创 selenium-浏览器复用&cookie复用
浏览器复用流程chrome浏览器放入环境变量中打开调试模式:命令行输入 chrome --remote-debugging-port=9222(注意:Mac输入的命令是:Google\ Chrome --remote-debugging-port=9222)python中的关键代码:chrome_arg=webdriver.ChromeOptions()chrome_arg.debugger_address=‘127.0.0.1:9222’self.driver=webdriver.Chrom
2021-03-21 16:15:54
501
原创 selenium-弹窗处理
介绍在页面操作中有时会遇到javascript所生成的alert、confirm以及prompt弹窗,可以使用switch_to.alert()方法定位到,然后使用text/accept/dismiss/send_keys等方法进行操作操作alert常用的方法switch_to.alert():获取当前页面上的警告框text:返回alert/confirm/prompt中的文字信息accept():接受现有警告框dismiss():解散现有警告框send_keys(keysToSend)
2021-03-09 20:17:12
127
原创 selenium-文件上传
input标签可以直接使用send_keys(文件地址)上传文件用法el=driver.find_element_by_id(‘上传按钮id’)el.send_keys(‘文件路径+文件名’)例子import timefrom os import pathfrom selenium import webdriverclass TestFile: def setup(self): self.driver = webdriver.Chrome()
2021-03-09 19:59:02
43
原创 selenium-执行javascript脚本
用法selenium能够执行js,使得selenium拥有更为强大的能力。既然能执行js,那么js能做的事情,selenium应该大部分也能做直接使用js操作页面,能解决很多click()不生效的问题页面滑动到底部,顶部处理富文本,时间控件的输入javascript的一些用法document.titlewindow.alert(“hello world”)JSON.stringify(performance.timing)代码中调用js页面滑动到底部self.driver.e
2021-03-07 18:04:08
200
原创 selenium-多frame处理
在web自动化中,如果一个元素定位不到,那么很大可能是在iframe中什么是frame?frame是html的框架,在html中,所谓的框架就是可以在同一个浏览器中显示不止一个页面基于html的框架,又分为垂直框架和水平框架(cols、rows)frame 分类frame标签包含framest、frame、iframe三种framest和普通的标签一样,不会影响正常的定位,可以使用index、id、name、webelement任意种方式定位frame而frame与iframe对sele
2021-03-04 20:17:49
235
原创 selenium-多窗口处理
多窗口处理点击某些链接,会重新打开一个窗口,对于这种情况,想在新页面上操作,就得先切换窗口了获取窗口的唯一标识用句柄表示,所以只需要切换句柄,就可以在多个页面灵活操作了多窗口处理流程先获取到当前的窗口句柄(driver.current_window_handle)再获取到所有的窗口句柄(driver.window_handles)判断是否是想要操作的窗口,如果是,就可以对窗口进行操作,如果不是,跳转到另外一个窗口,对另一个窗口进行操作(driver.switch_to_window)例
2021-02-25 21:13:06
603
原创 selenium-TouchAction
参考文档:https://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.touch_actionshttps://www.selenium.dev/selenium/docs/api/py/webdriver/selenium.webdriver.common.touch_actions.html介绍类似于ActionChains,AchtionChains只是针对PC端程序鼠标模拟的一系列操作
2021-02-25 10:23:21
231
原创 selenium-ActionChains
介绍官方文档:https://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chainsActionChains:执行PC端的鼠标点击、双击、右键、拖拽等事件TouchActions:模拟PC和移动端的点击、滑动、拖拽、多点触控等多种手势操作执行原理调用ActionChains的方法时,不会立即执行,而是将所有的操作,按顺序存放在一个队列里,当你调用perform()方法时,队列
2021-02-24 21:18:05
150
原创 selenium-介绍&显式/隐式等待&元素定位
selenium支持web浏览器的自动化,主要由3个工具构成:WebDriver、IDE、Grid官网:https://www.selenium.dev/chromedriver下载地址:http://npm.taobao.org/mirrors/chromedriver配置环境变量vim ~/.bash_profile检查是否配置好:直接在控制台输入chromedriver学习文档:https://selenium-python.readthedocs.io/隐式等待:设置一个等待时间,轮询
2021-02-02 18:44:24
208
原创 pytest测试框架
识别的测试文件test_*.py*_test.py识别的用例Test*类包含的所有test_*的方法(测试类不能带有__init__方法)不在class中的所有的test_*方法pytest也可以执行unittest框架写的用例和方法控制台执行直接执行 pytest 文件名pytest -v 文件名 输出详细信息pytest -s 文件名 把测试用例中print的内容也打印出来pytest 文件名.py::类名 运行某个模块中的某个类pytest 文件名.py::类名::方法名 运
2021-01-03 16:11:54
479
原创 Allure测试框架
allure介绍allure是一个轻量级、灵活的、支持多语言的测试报告工具多平台的,奢华的report框架可以为dev/qa提供详尽的测试报告、测试步骤、log为管理层提供high level统计报告java语言开发的,支持pytest、javascript、PHP、ruby等可以集成到Jenkins安装mac安装allure:brew install allurepytest使用allure:pip install allure-pytest官网:http://allure.qatoo
2020-12-13 19:21:34
261
原创 pytest参数化
pytest数据参数化用法 @pytest.mark.parametrize(argnames,argvalues)argnames:要参数化的变量,string(逗号分割),list,tupleargvalues:参数化的值,list[list],list[tuple],tuple[list],tuple[tuple]举例data.yaml 文件- - 10 - 20- - 30 - 40python文件import pytestimport yaml@pyte
2020-12-06 17:55:19
37
原创 python 虚拟环境
虚拟环境文档:https://docs.python.org/zh-cn/3/tutorial/venv.html创建虚拟环境 python3 -m venv tutorial-env虚拟环境激活 source tutorial-env/bin/activate,可进行库安装退出虚拟环境 deactivate
2020-11-11 21:08:27
31
原创 python-unittest
import unittestclass TestDemo1(unittest.TestCase): @classmethod def setUpClass(cls): print('setUpClass') @classmethod def tearDownClass(cls): print('tearDownClass') def setUp(self): print('setUp') def t
2020-11-11 21:07:16
41
原创 python多线程处理
进程进程是执行中的程序拥有独立地址空间、内存、数据栈等操作系统管理派生(fork或spawn)新进程进程间通信(IPC)方式共享信息并行执行(同一时刻有多个进程执行)线程同进程下执行,并共享相同的上下文线程间的信息共享和通信更加容易多线程并发执行(每个时刻只有一个线程执行,对线程进行轮询执行)需要同步原语(锁、信号量)python与线程解释器主循环主循环中只有一个控制线程在执行使用全局解释器锁(GIL)两种线程管理_thread:提供了基本的线程和锁thre
2020-11-07 16:41:30
59
原创 python标准库
os模块# python标准库-osimport os# 当前文件的路径cwd = os.getcwd()print(cwd)# 判断当前路径下是否有文件夹file_dir,没有的话则创建文件夹file_dir = "test_dir"if not os.path.exists(file_dir): os.mkdir(file_dir)# 判断路径file_dir下是否有文件file,没有的话则创建文件,并在文件中输入内容file = "test_file"if not
2020-11-02 21:25:09
37
原创 python面向对象编程
对应代码class Person: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex def eat(self): print(f'{self.name} is eat') def drink(self): print(f'{self.name} is drink') def
2020-09-14 09:39:19
78
原创 python输入与输出
字面量插值将变量、常量以及表达式插入的一种技术,可以避免字符串拼接的问题字面量插值方法格式化输出(%用法)%d 十进制整数%s 字符串对应代码str_1 = "my age is %d"%20print(str_1)str_2 = "my name is %s,my age is %d"%('lily', 20)print(str_2)# 浮点数,并保留两位小数str_3 = "PI = %.2f"%3.14159print(str_3)对应结果my age is
2020-08-31 09:33:26
46
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人