appium 碰到的坑

1、failed install setting_apk-debug.apk
解决办法:
找到android.js 找到下面代码:
async.series([
this.initJavaVersion.bind(this),
this.initAdb.bind(this),
this.packageAndLaunchActivityFromManifest.bind(this),
this.initUiautomator.bind(this),
this.prepareDevice.bind(this),
this.checkApiLevel.bind(this),
this.pushStrings.bind(this),
this.processFromManifest.bind(this),
this.uninstallApp.bind(this),
this.installAppForTest.bind(this),
this.forwardPort.bind(this),
this.pushAppium.bind(this),
this.initUnicode.bind(this),
// this.pushSettingsApp.bind(this),
//this.pushUnlock.bind(this),
function (cb) {this.uiautomator.start(cb);}.bind(this),
this.wakeUp.bind(this),
this.unlock.bind(this),
this.getDataDir.bind(this),
注释掉:
this.pushSettingsApp.bind(this),
this.pushUnlock.bind(this),

2、连接真机报command failed shell “ps ‘uiautomator错误
文件路径为:/Applications/Appium.app/Contents/Resources/node_modules/appium/submodules/appium-adb/lib
找到一下代码:
ADB.prototype.shell = function (cmd, cb) {
if (cmd.indexOf(‘”‘) === -1) {
cmd = ‘”‘ + cmd + ‘”‘;
}
var execCmd = ‘shell ‘ + cmd;
this.exec(execCmd, cb);
};
在这段代码后面添加:
ADB.prototype.shell_grep = function (cmd, grep, cb) {
if (cmd.indexOf(‘”‘) === -1) {
cmd = ‘”‘ + cmd + ‘”‘;
}
var execCmd = ‘shell ‘ + cmd + ‘| grep ‘ + grep;
this.exec(execCmd, cb);
};

继续找到下面代码:
ADB.prototype.getPIDsByName = function (name, cb) {
logger.debug(“Getting all processes with ‘” + name + “‘”);
this.shell(“ps ‘” + name + “‘”, function (err, stdout) {
if (err) return cb(err);
stdout = stdout.trim();
var procs = [];
var outlines = stdout.split(“\n”);
outlines.shift();
_.each(outlines, function (outline) {
if (outline.indexOf(name) !== -1) {
procs.push(outline);
}
});
if (procs.length < 1) {
logger.debug("No matching processes found");
return cb(null, []);
}
var pids = [];
_.each(procs, function (proc) {
var match = /[^\t ]+[\t ]+([0-9]+)/.exec(proc);
if (match) {
pids.push(parseInt(match[1], 10));
}
});
if (pids.length !== procs.length) {
var msg = "Could not extract PIDs from ps output. PIDS: " +
JSON.stringify(pids) + ", Procs: " + JSON.stringify(procs);
return cb(new Error(msg));
}
cb(null, pids);
});
};
将其注释掉,用下面的代码进行替换:
ADB.prototype.getPIDsByName = function (name, cb) {
logger.debug("Getting all processes with '" + name + "'");
this.shell_grep("ps", name, function (err, stdout) {
if (err) {
logger.debug("No matching processes found");
return cb(null, []);
}
var pids = [];
_.each(procs, function (proc) {
var match = /[^\t ]+[\t ]+([0-9]+)/.exec(proc);
if (match) {
pids.push(parseInt(match[1], 10));
}
});
if (pids.length !== procs.length) {
var msg = "Could not extract PIDs from ps output. PIDS: " +
JSON.stringify(pids) + ", Procs: " + JSON.stringify(procs);
return cb(new Error(msg));
}
cb(null, pids);
});
};

重启appium,问题终于解决。

senlenium send.key批量输入

#coding=utf-8
from selenium import webdriver
import time
driver = webdriver.Safari()
driver.get(“http://192.168.1.17:8090/login”)
time.sleep(3)
driver.find_element_by_id(“amount”).send_keys(“输入你的账号”)
driver.find_element_by_id(“password”).send_keys(“输入你的密码”)
driver.find_element_by_xpath(“/html/body/section/div/div[2]/div/form/input”).click()
time.sleep(5)
a= 0
while a<=3:

connect = ["test1","hi",u"地方","dhf"]
for i in connect:

driver.find_element_by_xpath("/html/body/header/div/div[1]/ul/li[3]").click()
time.sleep(5)
driver.find_element_by_class_name("add-shop").click()
time.sleep(3)
driver.find_element_by_tag_name("input").send_keys(i)
driver.find_element_by_class_name("btn btn-primary").click()
a+=1
time.sleep(4)
driver.quit()

selenium 获取登录cookie

#coding=utf-8
from selenium import webdriver
import time
driver = webdriver.Safari()
driver.get(“http://192.168.1.17:8090/login”)
time.sleep(3)
driver.find_element_by_id(“amount”).send_keys(“173”)
driver.find_element_by_id(“password”).send_keys(“123”)
driver.find_element_by_xpath(“/html/body/section/div/div[2]/div/form/input”).click()
time.sleep(5)
cookie = driver.get_cookies()
cookie_list = []
for i in cookie:
cookie = i[‘name’] + ‘=’ + i[‘value’]
cookie_list.append(cookie)
cookie_str = “;”.join(cookie_list)
print cookie_str
driver.quit()

selenium 登录Demo

#coding=utf-8
from selenium import webdriver
import time
driver = webdriver.Safari()
driver.get(“http://192.168.1.17:8090/login”)
time.sleep(3)
driver.find_element_by_id(“amount”).send_keys(“173”)
driver.find_element_by_id(“password”).send_keys(“123”)
driver.find_element_by_xpath(“/html/body/section/div/div[2]/div/form/input”).click()
time.sleep(4)
driver.quit()

selenium web页面滚动滚动条

#coding=utf-8
from selenium import webdriver
import  time


driver = webdriver.Safari()
driver.set_page_load_timeout(10)
driver.get('https://www.baidu.com/')
driver.maximize_window()

driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep(3)
js = "var c=document.body.scrollTop=100000"
driver.execute_script(js)
time.sleep(6)
driver.quit()

第二种:
#coding=utf-8
from selenium import webdriver
import time

driver = webdriver.Safari()
driver.set_page_load_timeout(10)
driver.get('https://www.baidu.com/')
driver.maximize_window()

driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep(3)
driver.execute_script("window.scrollTo(0,100000)")
time.sleep(6)
driver.quit()

selenium 网页搜索Demo

#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import unittest

class PythonSearch(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Safari()
    def test_search(self):
        driver = self.driver
        driver.get("http://www.python.org")
        elem = driver.find_element_by_name("q")
        elem.send_keys("pyhton")

        elem.send_keys(Keys.RETURN)
        assert "No results found." not in driver.page_source
    def tearDown(self):
        self.driver.quit()
if __name__ == "__main__":
    unittest.main()

selenium+python2.7 +chrome环境搭建

window 安装步骤:

1、下载python安装。

https://www.python.org/downloads

根据自己的操作系统,选择相应的版本进行安装。我的安装目录为:C:\Python27

2、配置python环境变量。

修改我的电脑–>属性–>环境变量–>系统变量中的PATH。变量值: ;C:\Python27;C:\Python27\Scripts;

3、安装selenium

我是通过pip安装的,命令为:pip install selenium

当然也可以直接下载selenium包进行安装。步骤为:cmd进入目录执行python setup.py install

4、安装chromedriver

下载与chrome对应版本的chromedriver。将chromedriver文件放在chrome安装目录下并配置到环境变量中。配置方法参考步骤2.

附:chrome与chromedriver版本之间的对应关系。

所有版本的chromedriver可以在http://chromedriver.storage.googleapis.com/index.html中进行下载。

至此:python+chromedriver 在window中配置已经结束

 

Jmeter 后置处理器

如何获取HTTP请求 响应结果的数据? 此文以获取产品ID为例进行演示。

如下为请求相应数据中的部分数据,我们最终要获取的数据为:
productid=1602171116hezongjiaotong中的1602171116hezongjiaotong。

{productid=1602171116hezongjiaotong
productid=2016002100000000guoqibao
productid=201600210000000guahaobao
productid=201601060931huanqiuwuyou
productid=20160119142600luxingxiaa}

那么如何获取呢?Jmeter提供的后置处理器则为我们提供了获取方法。以下我们以正则表达式提取器为例进行说明,添加的路径为【添加/后置处理器/正则表达式提取器】,添加后目录结果如下:

对应添加的在正则表达式如下所示:

正则提取器说明:

  • Apply to:应用范围
  • 要检查的响应字段:样本数据源。
  • 引用名称:其他地方引用时的变量名称,引用方法:${引用名称}
  • 正则表达式:数据提取器,如上图的productid=(.*)不熟悉正则的,劳烦联系度娘或者谷大爷,谢谢!
  • 模板:对应正则表达式提取器类型,样式为:1。若为:0,则为所有的匹配数据,例如:productid=1602171116hezongjiaotong其中1602171116hezongjiaotong 为 (.*) 匹配的数据,即最终提取的目标部分。若模板为:1,则 1 对应正则表达式中的 (.+?)
  • 匹配数字:正则表达式匹配数据的最终结果可以看做一个数组,匹配数字即可看做是数组的第几个元素。当为 0 时,随机返回匹配的数据,当为 1 时,表示返回匹配结果数组的第一个元素。
  • 缺省值:匹配失败时的默认值。通常用于后续的逻辑判断,一般通常为特定含义的英文大写单词组合,简单可写为 ERROR。

 

Jmeter 代理服务器设置

(一)设置Jmeter之web代理,操作步骤我们以gif图代替。

第一步:在“工作台”添加http代理服务器

第二步:添加一个线程组

第三步:在代理服务器上设置各项参数,并启动代理服务器

第四步:设置浏览器的代理,必须跟代理服务器 保持一样的参数

第五步:在浏览器操作,检查jmeter是否有录制相关操作。

第六步:设置浏览器代理。

第七步:选择就可以愉快的进行操作了。

(二)设置Jmeter之app代理,操作步骤如下所示:

第一步:设置jmeter代理服务器,与设置web代理的第五步一致

第二步:找到本机链接的ip地址:打开CMD命令行工具,输入ipconfig

第三步:

打开手机wifi设置,必须跟代理服务器 保持一样的参数

第四步:可以启动手机上任一app,可以看到所有的请求都被发送到jmeter了。

注意:第一:录制结束后,一定要去掉代理,否则你的浏览器、手机在代理断开后上不了网。

第二:手机必须跟jmeter代理服务器在同一网段内

Jmeter之定时器

简单来说一下,虽然我们常说的“多用户并发测试”,但是真正的并发是不存在的,为了更真实的模拟并发,我们采用集合点。比较常见的就是用户登录。下面我们就模拟多用户同时登录。

1、启动GUI界面,并添加登录接口

2、添加集合点

3、集合点用法

Number of Simulated Users to Group by:集合多少人后再执行请求(也就是执行的线程数)

注意:等同于设置为线程租中的线程数,一定要确保设置的值不大于它所在线程组包含的用户数。

Timeout in milliseconds:指定人数 多少秒没集合到算超时(设置延迟时间以毫秒为单位)

注意:如果设置Timeout in milliseconds为0,表示无超时时间,会一直等下去。
线程数量无法达到”Number of Simultaneous Users to Group by”中设置的值,那么Test将无限等待,除非手动终止。

4、查看结果树

至此,jmeter之定时器使用及配置告一段落。