今天给写的应用做测试,服务器单元测试搞定了,要做功能测试和验收测试
功能测试需要模拟Ajax,验收测试需要Selenium,我之前的Selenium都是用Python,一想的话那就都用Pyhton了
结果一上来就掉到了Python的坑里,google了一下,主要有两个库实现了AJAX POST
1、urllib
2、requests
代码我就不贴了,反正都TM有问题。
这两个库的问题是,我用Python写了一个字典,字典的内容是我要发的数据
{"data": {"a":"b"}, "test": {"temp": "moduomoduo"}}
两个库都会用类似这样的一个函数来发起
post(url, data)
POST到服务器的数据会出现解析问题,如果是使用$.ajax来post数据,服务器var_dump出来的数据格式是
array(2) {
["data"]=>
array(1) {
["a"]=>
string(1) "b"
}
["test"]=>
array(1) {
["temp"]=>
string(10) "moduomoduo"
}
}
以上是正确的数据格式,就是当使用$_POST取出数据的时候,就是数组了
下面是urllib库的
array(2) {
["test"]=>
string(22) "{'temp': 'moduomoduo'}"
["data"]=>
string(10) "{'a': 'b'}"
}
发现问题了吗,会把二级字典里面的值转成json
下面是requests库里面的,这个更离谱一些
array(2) {
["test"]=>
string(4) "temp"
["data"]=>
string(1) "a"
}
只取了二级字典的Key值,而且只取第一个Key值,这个在requests 2.7.0的版本存在,github上自己也开了
issue说有问题,不过看发起者的意思是劳资不想改了,你们来改吧
反正这两个坑坑了我一下午,所以记下来,你们要是正好在做这个,碰到这两个坑记得绕道走
我现在的解决方案是,直接用Selenium模拟Ajax请求,你们要是有原生的Python的方法帮我发个链接呗