基于Django的电子商务网站开发(连载38)

简介: 顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript,主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。

4.2.4 针对CSRF防御接口测试代码的调整


为了适应增加对CSRF的防御功能,必须对测试代码进行调整,由于前面对代码进行了很好的封装,所以在这里只需要调整interface/util.pyUtil类中的run_test()方法就可以了。在这里先把改造后的代码展示给大家。


...
#运行测试接口
   # mylist测试数据
   # values登录数据
   def run_test(self,mylist,values,sign):
        #获取测试URL
        Login_url =    self.url+"/login_action/" #login_Url为登录的URL
        run_url = mylist["Url"]    #run_url为运行测试用例所需的URL
                    #获取csrf_token
        data    = self.s.get(Login_url)
           csrf_token = data.cookies["csrftoken"]
        #初始化登录变量
        #获取登录数据
        username = values.split(',')[1].strip("\"")
        password =    values.split(',')[2].strip("\"")
        #判断当前测试是否需要登录
        if sign:
             #使用当前用户登录系统
payload    ={"username":username,"password":password,"csrfmiddlewaretoken":csrf_token}
             try:
                 data =    self.s.post(Login_url,data=payload)
                 except Exception as e:
                    print(e)
                 #运行测试接口
                 try:
                    #为POST请求,由于post请求参数肯定是存在的,所以这里不判断有无参数
                    if    mylist["Method"] == "post":
                       #有请求参数
                       payload =    eval(mylist["InptArg"])
                       payload["csrfmiddlewaretoken"]    = csrf_token
                       data =    self.s.post(run_url,data=payload)
                     #为GET请求
                     elif    mylist["Method"] == "get":
                        if    mylist["InptArg"].strip()=="":
                             #没有请求参数
                             data =    self.s.get(run_url)
                        else:
                             #有请求参数
                             payload =    eval(mylist["InptArg"])
                             data =    self.s.get(run_url,params=payload)
           except Exception as e:
                print(e)
           else:
                return data
...


1)首先通过代码data =self.s.get(Login_url)访问登录页面。

2)通过代码csrf_token= data.cookies["csrftoken"]获取产生的CSRF令牌cookie

3在初始化登录操作与执行POST操作的时候把令牌参数csrf_token加入到POST参数中。


在初始化登录操作中代码为。


...
#使用当前用户登录系统
payload ={"username":username,"password":password,"csrfmiddlewaretoken":csrf_token}
try:
       data =  self.s.post(Login_url,data=payload)
...


执行post操作中代码为。


...
#为POST请求,由于post请求参数肯定是存在的,所以这里不判断有无参数
if mylist["Method"] == "post":
#有请求参数
payload = eval(mylist["InptArg"])
payload["csrfmiddlewaretoken"] = csrf_token
data = self.s.post(run_url,data=payload)
...


userInfoConfig.xml中增加一个测试用例,测试不加载csrftoken,程序会不会产生403返回码并且返回的text中含有Forbidden字符。


...
         <!--- 测试CSRF不启用,返回403码 -->
         <case>
                  <TestId>userInfo-testcase006</TestId>
                  <Title>修改用户密码</Title>
                  <Method>post</Method>
                  <Desc>密码修改成功</Desc>
                  <Url>http://127.0.0.1:8000/change_password/</Url>
                    <InptArg>{"oldpassword":"000000","newpassword":"123456","checkpassword":"123456"}</InptArg><!---  新密码与旧密码不同,确认密码与新密码匹配 -->
                  <Result>403</Result>
                  <CheckWord>Forbidden</CheckWord>
         </case>...


interface/util.py中的run_test()还要进行小小地改动。


...
    def  run_test(self,mylist,values,sign):
       ...
       #运行测试接口
       try:
          #为POST请求,由于post请求参数肯定是存在的,所以这里不判断有无参数
          if mylist["Method"]  == "post":
                 payload =  eval(mylist["InptArg"])
                 #如果不是测试CSRF的
                  if  mylist["Result"]!="403":
                          payload["csrfmiddlewaretoken"]= csrf_token
                  data = self.s.post(run_url,data=payload)
...


        在这里判断测试验证返回码如果是403,就在请求参数中不加入csrfmiddlewaretoken项。


星云测试

http://www.teststars.cc

奇林软件

http://www.kylinpet.com

联合通测

http://www.quicktesting.net


顾翔凡言:

      软件测试正在生病,而且病得不轻,自动化测试被要不吹得太火,要不一点都不会,自动化比不过开发、测试又找不到缺陷,丢了西瓜也捡不到芝麻。

目录
相关文章
|
3月前
|
搜索推荐 算法 前端开发
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
89 4
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
|
SQL XML 前端开发
基于Django的电子商务网站开发(连载40)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
87 0
|
安全 测试技术 Python
基于Django的电子商务网站开发(连载39)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
49 0
基于Django的电子商务网站开发(连载39)
|
存储 安全 前端开发
基于Django的电子商务网站开发(连载37)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
118 0
基于Django的电子商务网站开发(连载37)
|
测试技术 Python
基于Django的电子商务网站开发(连载36)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
63 0
基于Django的电子商务网站开发(连载36)
|
XML 测试技术 数据格式
基于Django的电子商务网站开发(连载35)
基于Django的电子商务网站开发(连载35)
77 0
|
XML 测试技术 数据库
基于Django的电子商务网站开发(连载34)
基于Django的电子商务网站开发(连载34)
44 0
基于Django的电子商务网站开发(连载34)
|
XML 测试技术 数据格式
基于Django的电子商务网站开发(连载33)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
67 0
基于Django的电子商务网站开发(连载33)
|
存储 测试技术 数据库
基于Django的电子商务网站开发(连载32)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
56 0
|
25天前
|
监控 安全 应用服务中间件
python中Django入门(四)
python中Django入门(四)
28 0