经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
一小只支付接口的自动化
来源:cnblogs  作者:妖小华  时间:2018/9/26 17:46:14  对本文有异议

  原先呢我没想着要搞这个,我自己感觉点点点还是比较舒服的。但是极地冰川消融导致海平面上升,让我突然觉得这是有必要的。

  扯皮的话不多说,我们需要先把思路理理清楚,这个时候倒立起来总会有其他意想不到的效果。

  发了一个正常的请求,看到我购买成功后返回结果是:"state"=1。知道这个结果以后,根据自己的业务经验可以总结出,需要以下几个步骤来完成。

 

所有的逻辑都是在正常登陆的情况下产生的,so,登陆的方法不能少:

  return的是登陆后产生的一个auth值,之后的操作会用到这个值。

  这个是直接用缓存页面获取的,也可以正常登陆获取,

  获取的方法可以用正则,也可以直接转换取值,效果都是一样的。

 1 # coding:utf-8 2 import requests 3 import re 4 def Login(s): 5     ''' 6     保持uid    314948的登陆状态 7     :return:提取auth的值 8     ''' 9     url = 'http://crmtest.bdwork.com/member.php?mod=logging&action=login&referer='10     h = {11         'Host': 'crmtest.bdwork.com',12         'Connection': 'keep-alive',13         'Upgrade-Insecure-Requests': '1',14         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4092.1 Safari/537.36',15         'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',16         'Referer': 'http://crmtest.bdwork.com/home.php?mod=spacecp&ac=look',17         'Accept-Encoding': 'gzip, deflate',18         'Accept-Language': 'zh-CN,zh;q=0.8'19         }20     cookie = {21         'brandclick':'brandclick',22         'KY1F_c7af_saltkey':'c32x3x6a',23         'KY1F_c7af_lastvisit':'1533198615',24         'KY1F_c7af_sendmail':'1',25         'KY1F_c7af_noticeTitle':'1',26         'UM_distinctid':'164f9f95c5830e-0679413bf11568-4c531929-100200-164f9f95c59474',27         'KY1F_c7af__refer':'%252Fhome.php%253Fmod%253Dspacecp%2526ac%253Dlook',28         'CNZZDATA1259972829':'1337227657-1530510545-%7C1533198970',29         'Hm_lvt_aabf378828361ace85e070bda547e0c2':'1532587790,1532703535,1532934413,1533188504',30         'Hm_lpvt_aabf378828361ace85e070bda547e0c2':'1533202228',31         'Hm_lvt_855f1a9b2df256430c5190b4c155e0be':'1532587790,1532703535,1532934413,1533188504',32         'Hm_lpvt_855f1a9b2df256430c5190b4c155e0be':'1533202229',33         'KY1F_c7af_lastact':'1533202227%09member.php%09logging',34         'encodemobile':'cP22pue9GTQnWMxgrOUowqIFOw',35         'name':'17621212121',36         'KY1F_c7af_ulastactivity':'e4df0yITlF8mbtqQE5dAg%2FzDeXDv%2B3mOev0miMuxK8fR%2FG2WwF%2Fc',37         'KY1F_c7af_sid':'m3ApNB',38         'KY1F_c7af_auth':'b61asNdM0xvEJX17xo6x8LhP3d7utK0DAWkXCm23DiIx262XHLcqgzsh4Qdm7jOjCwsiIOGy0LJFiYiTlfwI%2BcQqpng',39         'KY1F_c7af_lastcheckfeed':'314948%7C1533202227',40         'KY1F_c7af_checkfollow':'1',41         'KY1F_c7af_lip':'116.226.114.196%2C1533201831',42         'KY1F_c7af_security_cookiereport':'921azQNj36RYks%2BTjCXtqUSWvv9kMJQOPGbKe4zawKNQngh3mPI8'43         }44     d = s.get(url,headers=h,cookies=cookie)45     r = d.text46     # if '吕振华' in r:47     #     print('登陆成功,提取auth:',)48     # else:49     #     print('登录失败')50     auth0 = re.findall(r"auth = \"(.+?)\";",r)51     auth = ''.join(auth0)52     return auth53 if __name__ in '__main__':54     s = requests.session()55     # print('\'',''.join(Login(s)),'\'')56     print(Login(s))

 

登陆之后要做什么呢,当然是操作购买道具,会员等等需要支付的动作:

  例如,道具刷新卡

 1 # coding:utf-8 2 import requests 3  4 s = requests.session() 5 def test_g_1(auth): 6     ''' 7     刷新卡购买 8     :return:state=1正确 9     '''10     url = 'http://crmtest.bdwork.com/appapi.php?mod=pay_transeMoney'11     h = {12         'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36',13         'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',14         'Referer': 'http://crmtest.bdwork.com/member.php?mod=txl&act=zhifu&zhifu_type=4&authorid=1&bump_id=1&id=33&idtype=tid&tid=&url=',15         'Accept-Encoding': 'gzip, deflate',16         'Accept-Language': 'zh-CN,zh;q=0.9',17         'Cookie': 'name=17621212121',18         'Host': 'crmtest.bdwork.com',19         'Content-Length': '88'20         }21 22     body = {23         'uid':'314948',24         'auth':auth,25         'tuid':'1',26         'amount':'1',27         'transtype':'-22',28         'applyid':'1'29         }30     r = s.post(url,data=body,headers=h)31     return r.text32 # if __name__ in '__main__':33 #     try:34 #         auth = login.Login(s)35 #         print(test_g_1(auth))36 #     except:37 #         pass

 

购买完成之后,系统里就没有什么操作了,接下来只需要在unittest中写好用例就ok了。

开始之前需要打开session,接着添加备注提示,然后调用login方法提取操作必须的auth值,之后调用购买道具方法并打印出提示信息,最后添加断言就完工啦。

 1 import unittest 2 import requests 3 class TestCase(unittest.TestCase): 4     #开始前打开session 5     @classmethod 6     def setUpClass(cls): 7         cls.s = requests.session() 8  9     def test_Shauxinka(self):10         '''11         刷新卡购买12         :return: 当state=1时通过13         '''14         #调用登陆方法,提取auth值15         auth = login.Login(self.s)16         q = shuaxinka.test_g_1(auth)17         print('刷新卡购买返回状态为:%s'%q)18         #添加断言19         self.assertTrue(q == '{"state":1}')

  单个道具写完就可以花时间把所有相关的动作总结一下,ctrl+c,ctrl+v

  需要生成报告的可以自行百度一下,我贴个效果图出来:

 

 

到这里就算整体完成了,总结一下,

首先梳理思路,然后做出相应的操作,最后添加unittest用例

言辞略显简陋,如有雷同,不胜荣幸。

 

 友情链接:直通硅谷  点职佳