时隔一年多,再次更新,记录在软件测试路上的点滴


立帖为证,每周至少更新一次,谈谈自己的成长和学习到的技术

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)






优质内容筛选与推荐>>
1、2019春招面试题总结-03
2、笔记函数 - 判断内存是否有效
3、调用网易有道词典api
4、php (zip)文件下载设置
5、Flooded! UVA - 815


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号