调试代码

上一篇 / 下一篇  2016-12-14 22:45:47 / 个人分类:python

#coding=utf-8importurllibimporthttplibimportthreadingimportjsonimportsysimportosfrompexpectimportpxsshimportreimportrequests#以上是导入涉及到的模块username='135********'password='123***'url ='http://xxxx.com/ajax/user_login/'form_data={'username':username,'password':password}
login_response = requests.post(url, data=form_data)
c = login_response.cookiesprintc#以上是登录的代码,将登录后的cookie赋值在参数c上,之后涉及到用cookie就可以把c作为全局变量进行调用defput_order():globalc#调用全局变量cookieurl ='http://xxx.com/mobile/ajax/create_order/'form_data = {'restaurant_id':1116,'grid_location_id':60954,'menu_items_total':'12.00','delivery_fee':'3.00','menu_items_data':'[{"id":165316,"p":"2","q":6,"opts":[],"adds":[]}]','discount':0,'platform':1,'addition_data':'{}'}#订餐的餐厅和菜品的参数make_response = requests.post(url,data=form_data,cookies=c)
    res= make_response.text#获取提交订单请求后返回的内容id=json.loads(res)["order_id"]#将返回的内容转换成字典,并获取order_id字段对应的数据id=str(id)#由于返回的数字,无法打印,所以需要转换成字符串printid#打印的目的是为了调试以及出错时查看错误returnid#返回id,最后在提交订单时需要传入这个参数defsms():globalcglobalusername#调用全局变量username,作为发送验证码的手机url ='http://xxx.com/ajax/is_order_need_sms_validate/'form_data={'mobile':username} 
    jsondata = json.dumps(form_data)#将form转换成json格式,因为这里需要传入json格式,如果不需要json格式的数据,则不用转换sms_response = requests.post(url,data=jsondata,cookies=c)#发送请求查看该手机号是否需要进行验证码的验证,每个手机号码都要累加当天的订餐次数,超过3次则需要验证码res= sms_response.text
    text = eval("u"+"'"+res+"'")printtextiftext=='{"status": "ok", "need_validate": false, "send_type": "sms"}':#如果返回是这样的数据,则需要发送验证码,直接退出函数,执行下一步的提交订单操作returnelse:#如果返回不是这样的数据request_sms()#点击发送验证到手机validate_sms()#后台获取验证码并输入验证defrequest_sms():globalc 
    url ='http://xxx.com/ajax/common_sms_code/'form_data={'request_type':'validate_order_mobile'}
    jsondata = json.dumps(form_data)
sms_response = requests.post(url,data=jsondata,cookies=c)
    res= sms_response.text
    text = eval("u"+"'"+res+"'")printtextdefvalidate_sms():globalc
    s=pxssh.pxssh()
    s.login('114.80.202.22','zsz','zeronicky336')
    s.sendline ("tail -n 100 /var/log/DeliveryHeroChina/deliveryhero.log |grep 341")
    s.prompt()
    x= s.before
    a=x[-8:-2]printa#以上是通过远程ssh登录控制,并在日志里面查询验证码,然后将对应的验证码匹配出来,有兴趣的同学可以去搜索一下pxssh的相关信息,实用性非常强,通过python代码都可以做环境的部署/查看日志查询数据库/部署测试环境等等url ='http://staging.waimaichaoren.com/ajax/common_validate_sms_code/'form_data={'request_type':'validate_order_mobile','sms_code':a}#将验证码a作为参数传入sms_code中jsondata = json.dumps(form_data)
    sms_response = requests.post(url,data=jsondata,cookies=c)
    res= sms_response.text
    text = eval("u"+"'"+res+"'")printtext#以上就是一个发送验证码进行验证的过程,由于后台获取的验证码不可能会出错,所以这边默认验证码是肯定正确的,如果不正确那也是上一段代码验证码获取的错误defplace_order(id):globalcglobalusername
    url ='http:/xxx.com/mobile/ajax/place_order/'form_data={'order_id':id,'grid_location_id':609554,'order_source':'desktop','customer_name':'222','mobile_number':username,'delivery_address':'address','preorder':'no','preorder_date':'','preorder_time':'18:00','pay_type':'cash','activities':'','platform':1,'email_address':'','xstreet':'','comment':'','red_packet_id':''}#提交订单的参数place_response = requests.post(url,data=form_data,cookies=c)
    res= place_response.text
    text = eval("u"+"'"+res+"'")printtextdefmake_order():id=put_order()#发送订餐信息,获取并返回订餐的id,并作为参数传入提交订单函数sms()#调用短信验证码place_order(id)#提交订单if__name__ =="__main__":
    make_order()

这就是一个订餐的实例,基本都是通过request模拟请求完成的。自动化测试方式万变不离其中,在整个过程中的主要难点有以下几个:

  1. 了解业务逻辑,并组合好先后以及判断的顺序
  2. 参数的调用和传递
  3. 数据格式的转换
  4. 数据获取和提炼

只要精通了以上几点,任何自动化测试都不是问题。当然,大家看到的已经是成品了。单从代码调试的角度来说,你就会遇到很多问题,需要你具有独立解决问题的能力。方法很多,这个不是本篇重点,就不在这里说了。总而言之,天空飘来6个大字:不要依赖他人!随着测试技术的发展,对于技术要求会越来越高,甚至高于开发噢。而学习能力的Base,是习惯和兴趣。你做好投入技术的海洋,并且一去不复返哩咩?



TAG:

 

评分:0

我来说两句

Open Toolbar