时隔一年多,再次更新,记录在软件测试路上的点滴
立帖为证,每周至少更新一次,谈谈自己的成长和学习到的技术
2017-03-27-安卓SDK安装和monkey的基本操作
1.安装JDK1.8(Oracle官网下载,配置环境变量)
2.安装安卓SDK
下载连接:http://pan.baidu.com/s/1nuViK0x 密码:rh7f
傻瓜式的安装,点击下一步即可
2.1环境变量ANDROID_HOME,值为安装路径"D:\liangs\android-sdk"(以安装时的路径)
2.2配置path变量,在PATH变量值里加入androidSDK中platform-tools和tools的目录路径,在PATH最前面加入"%ANDROID_HOME%;",最后面加入";%ANDROID_HOME%\platform-tools"(可以不配置,但是执行ADB命令需要在目录下执行,很麻烦)
3.打开CMD窗口,输入adb devices 查看是否安装成功
2017-3-29-ADB基本操作
adb devices 获取设备信息
adb install [apk路径] 把安装包安装进手机
adb logcat | grep START 开始查看包名(运行时)
2017-3-29-ADB进行简单压力测试
adb shell monkey –p <包名> –-throttle 100 –-pct-touch 50 –-pct-motion 50 –v –v 1000 >D:\liangs\monkey.txt (包名用adb logcat | grep START,也可以用aapt)
指令中 --throttle 延迟ms
--pct-touch 50 百分之50的触摸事件
--pct-motion 50 百分之50的滑动屏幕事件
-v -v 日志详细程度中等级(日志分为简单、中等、详细)
在日志文件monkey.txt中搜索Exception异常记录
2017-4-01-ADB记录程序启动时间
adb logcat -d -s ActivityManager|findstr "Displayed">D:\log.txt
在log.txt中找到响应报名,查看启动时间
2017-4-09-jmeter参数化
使用用户参数元件进行参数化
添加变量,点击添加用户,将参数输入,在HTTP请求中用${name}获取变量(一个线程一个变量)
2017-4-10-jmeter参数化(2)
使用CSV参数化,Delimiter默认使用逗号','分割参数
2017-4-10-jmeter集合点
添加集合点
1集合用户数量,2超时事件(0代表无限等待)
2017-4-20-jmeter服务器检测
客户端中添加两个jar包
用X-FTP上传到linux服务器上,用xshell连接服务器输入命令启动
在客户端添加监听器,输入主机地址和端口号,准备完毕,启动
2017-4-30-selenium入门API整理
键盘事件:
Send_keys(Keys.CONTROL,’’)
Send_keys(keys.ENTER)
Submit()提交
鼠标事件:
context_click() 右击
double_click() 双击
drag_and_drop() 拖动
语句格式:
ActionChains(brower).move_to_element(move_mouse).perform()
ele.get_attribute(‘name’) 获取节点的属性
切换框架和窗口的命令:
browser.switch_to_frame()
browser.switch_to_window()
多层的ul窗口判断
dr.find_element_by_link_text('Link1').click()
#找到 id 为 dropdown1的父元素
WebDriverWait(dr,10).until(lambda the_driver: the_driver.find_element_by_id('dropdown1').is_displayed())
#在父亲元件下找到 link 为 Action 的子元素 dropdown是ul控件
menu=dr.find_element_by_id('dropdown1').find_element_by_link_text('Action')
webdriver.ActionChains(dr).move_to_element(menu).perform()
上传本地文件:
找到上传的按钮,发送路径
driver.find_element_by_name("file").send_keys('D:\\selenium_use_c ase\upload_file.txt')
各个元素的属性获取:
#获取网页标题
title = driver.title
print title
#获取元素的标题
text = driver.find_element_by_id("setf").text
print text
# 获取元素的标签
tag = driver.find_element_by_id("kw").tag_name
print tag
# 获取元素的其它属性
name =
driver.find_element_by_id("kw").get_attribute("class")
print name
# 获取输入框的内容
driver.find_element_by_id("kw").send_keys("yoyoketang")
value =
driver.find_element_by_id("kw").get_attribute("value")
print value
# 获取浏览器名称
print driver.name
切换iframe:
driver.switch_to.frame("x-URS-iframe")
# 释放iframe,重新回到主页面上
driver.switch_to.default_content()
下拉框:
# # 通过索引:select_by_index()
找到弹出框元素
# s = driver.find_element_by_id("nr")
# Select(s).select_by_index(2)
# # 通过value:select_by_value()
# s = driver.find_element_by_id("nr")
# Select(s).select_by_value("20")
弹出框:
t = driver.switch_to_alert()
print t.text
#t.dismiss()
t.accept()
#若是有文本输入的prompt,输入文本信息为
T.send_keys(“内容”)
处理自定义弹框:
Js='document.getElementById("doyoo_monitor").style.display="none";'
driver.execute_script(js)
拉到顶部、底部、聚焦元素
# 回到顶部
def scroll_top():
if driver.name == "chrome":
js = "var q=document.body.scrollTop=0"
else:
js = "var q=document.documentElement.scrollTop=0"
return driver.execute_script(js)
# 拉到底部
def scroll_foot():
if driver.name == "chrome":
js = "var q=document.body.scrollTop=10000"
else:
js = "var q=document.documentElement.scrollTop=10000"
return driver.execute_script(js)
# 聚焦元素
target = driver.find_element_by_xxxx()
driver.execute_script("arguments[0].scrollIntoView();", target)
内嵌div滚动条处理
滑动到底部
js1 = ‘document.getElementById(“id”).scrollTop = 10000’
driver.execute_script(js1)
滑动到顶部
js1 = ‘document.getElementById(“id”).scrollTop = 0’
driver.execute_script(js1)
滑动到左边
js1 = ‘document.getElementById(“id”).scrollLeft = 0’
driver.execute_script(js1)
滑动到右边
js1 = ‘document.getElementById(“id”).scrollLeft = 0’
driver.execute_script(js1)
加载配置文件:
# 配置文件地址
profile_directory =
r'C:\Users\xxx\AppData\Roaming\Mozilla\Firefox\Profiles\1x41j9of.default'
# 加载配置配置
profile = webdriver.FirefoxProfile(profile_directory)
# 启动浏览器配置
driver = webdriver.Firefox(profile)
单选复选的状态判断,以及选择操作
# 没点击操作前,判断选项框状态
s = driver.find_element_by_id("boy").is_selected()
print s
driver.find_element_by_id("boy").click()
# 点击后,判断元素是否为选中状态
r = driver.find_element_by_id("boy").is_selected()
print r
# 复选框单选
driver.find_element_by_id("c1").click()
# 复选框全选
checkboxs = driver.find_elements_by_xpath(".//*[@type='checkbox']")
for i in checkboxs:
i.click()
富文本输入编辑(需要切换iframe)
edittile =
u"Selenium2+python自动化23-富文本"
editbody = u"这里是发帖的正文"
driver.find_element_by_id("Editor_Edit_txbTitle").send_keys(edittile)
driver.switch_to.frame("Editor_Edit_EditorBody_ifr")
driver.find_element_by_id("tinymce").send_keys(Keys.TAB)
driver.find_element_by_id("tinymce").send_keys(editbody)
去掉Readonly属性,如日期控件
# 去掉元素的readonly属性
js =
'document.getElementById("train_date").removeAttribute("readonly");'
driver.execute_script(js)
# 用js方法输入日期
js_value =
'document.getElementById("train_date").value="2016-12-25"'
driver.execute_script(js_value)
# # 清空文本后输入值
# driver.find_element_by_id("train_date").clear()
# driver.find_element_by_id("train_date").send_keys("2016-12-25")
定位表格元素
#只需要修改序号就可以
t = driver.find_element_by_xpath(".//*[@id='myTable']/tbody/tr[2]/td[1]")
多窗口处理
js = 'document.getElementsByClassName("mnav")[0].target="_blank";'
#js = 'document.getElementsByClassName("mnav")[0].target="";'
driver.execute_script(js)
driver.find_element_by_link_text("糯米").click()
解决click失效问题:
# driver.find_element("id", "gxszButton").click()
# driver.find_element("class name", "prefpanelgo").click()
js = 'document.getElementsByClassName("prefpanelgo")[0].click();'
driver.execute_script(js)
发生错误截图并且以时间截图:
nowTime = time.strftime("%Y%m%d.%H.%M.%S")
self.driver.get_screenshot_as_file('%s.jpg' % nowTime)
2017-5-05selenium注意
selenium3.3在执行Action类的悬浮操作时,出现报错,将selenium降级2.5.3即可
2017-5-10unittest框架的三种加载测试组件方式
通过main方法执行
1.unittest.main()
2.通过方法名组装
suite = unittest.TestSuite()
suite.addTest(UC7TestCase("test01"))
suite.addTest(UC7TestCase("test02"))
# 执行测试
runner = unittest.TextTestRunner()
runner.run(suite)
3.通过类名加载累下所有的testcase
suite1 = unittest.TestLoader().loadTestsFromTestCase(TestCase1)
suite2 = unittest.TestLoader().loadTestsFromTestCase(TestCase2)
suite = unittest.TestSuite([suite1, suite2])
unittest.TextTestRunner(verbosity=2).run(suite)
优质内容筛选与推荐>>