关闭

软件测试之银行项目具体操作流程

发表于:2023-11-29 09:21

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:鱼鱼说测试    来源:CSDN

  项目背景:
  XXXX银行项目采用的是B/S架构,主要是为了解决银行业务中的柜员、凭证、现金、账务等来自存款、贷款、会计模块的管理。
  手工弊端:
  1.项目业务复杂度高,回归测试工作量大。
  2.单个接口功能比较简单,容易实现自动化集成,且相对UI更稳定,更能达到监控项目质量的目的。
  3.从前后端分离的角度说,只依赖前端限制并不能满足安全要求。
  优化方案及工具选择:
  · Postman:
  功能强大Chrome插件,界面好看响应格式自主选择,缺点支持的协议单一且不能数据分离,比较麻烦的还有不是所有的公司都能上谷歌
   · SoupUI:
  支持多协议(http\soup\rest等),能实现功能和性能测试的开源接口测试工具,灵活性高可在此基础上开发脚本,缺点上手比较难。
  · Jmeter:
  Java御用的接口压力测试工具,做接口功能测试有点大材小用,缺点不能生成可视化的接口测试报告。
  综上:手动开发比较合适。
  框架原理:
  采用数据驱动模式,将数据和业务逻辑分离,完成测试用例编写-》测试用例执行-》测试报告发送的目的。
  测试用例格式编写如下:
  代码实现:
  注:为了数据脱敏,以百度翻译接口为例
  1.读取测试用例数据data.py
  # coding=utf-8
  import json
  import xlrd
  import sys
  reload(sys)
  sys.setdefaultencoding('utf-8')
   
   
  def tableToJson():
      source = xlrd.open_workbook(r"C:\Users\HP\Desktop\0608\InterfaceData.xlsx")
      table = source.sheet_by_index(0)
      list = []  # 字典列表
      totalList = []  # json列表
      for i in xrange(1,2):         #获取第i个表第2行起的值作为用例的参数
          keys = table.col_values(1)  # 获取第i个表第2列的值
          keys.pop(0)
          for j in xrange(3, table.ncols):
              test_value = table.col_values(j)  # 获取第i个表第4列起的值作为用例的参数值
              test_value.pop(0)
              for k in range(len(test_value)):
                  s = test_value[k]
                  # print s
              data = dict(zip(keys, test_value))  # 等长两列表转为字典
              list.append(data)
             
      data = {}
      data[table.name] = list
      list = []
      data_to_json = json.dumps(data, ensure_ascii=False, encoding="gb2312")  # 将列表中的unicode转中文
      print u"用例数据:", data_to_json
      totalList.append(data_to_json)
      
      return totalList
   
  if __name__ == '__main__':
      jsonData = tableToJson()
   
      # 写入文件
      f = open(r"F:\TestData0618.json", 'w+')
      for i in jsonData:
          f.write(i)
          f.write('\n')
      f.close()
  运行结果:
  2.执行测试用例test.py
  #coding=utf-8
  import requests
  import unittest
  import json
   
  class MyTest(unittest.TestCase):  # 封装测试环境的初始化和还原的类
      def setUp(self):
          print("start test")
   
      def tearDown(self):
          print("end test")
   
   
  class Test_transapi(MyTest):  # 一个接口封装一个类
   
      @staticmethod
      def getParams():
          Data = open(r"F:\TestData0618.json").read()
          temp = eval(Data)   #type(Data)为str,type(temp)为dict
          data = temp['2100']
          return data
   
      def test_transapi(self):
          self.url = "http://fanyi.baidu.com/v2transapi"
          self.headers = {
              'Host': 'fanyi.baidu.com',
              'Upgrade-Insecure-Requests': '1',
              'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36',
              'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
              'Accept-Encoding': 'gzip, deflate, sdch, br',
              'Accept-Language': 'zh-CN,zh;q=0.8',
              'Cache-Control': 'max-age=0',
              'Connection': 'keep-alive'}
          data = self.getParams()
          for i in data:
              print i
              self.params = i
              #print u'参数:',self.params
              r = requests.get(url=self.url, params=self.params,headers=self.headers)
              #print (r.text)
              print (r.status_code)
              self.assertEqual(200,r.status_code)
          
          
   
   
  if __name__=="__main__":
      unittest.main()    
  运行结果:
  3.构建测试报告run.py
  #coding=utf-8
  from HTMLTestRunner import HTMLTestRunner  
  import time  
  import unittest
   
  #定义测试用例的目录为当前目录  
  test_dir = r'C:\Users\HP\Desktop\0608'  
  discover = unittest.defaultTestLoader.discover(test_dir,pattern = 'test*.py')  
    
  if __name__=="__main__":  
    
    
      #按照一定的格式获取当前的时间  
      now = time.strftime("%Y-%m-%d %H-%M-%S")  
        
      #定义报告存放路径  
      filename =test_dir + '/' + now + 'test_result.html'  
        
      fp = open(filename,"wb")  
      #定义测试报告  
      runner = HTMLTestRunner(stream =  fp,  
                              title = u"2100接口测试报告",  
                              description = u"测试用例执行情况:")  
      #运行测试  
      runner.run(discover)  
      fp.close() #关闭报告文件
  运行结果:
  4.发送测试报告send.py
  #coding=utf-8
   
  import smtplib
  from email.mime.text import MIMEText
  from email.mime.multipart import MIMEMultipart
   
  def SendMail(subject,msg,to_addrs,from_addr,smtp_addr,password):
      '''
      @subject:邮件主题
      @msg:邮件内容
      @to_addrs:收信人的邮箱地址
      @from_addr:发信人的邮箱地址
      @smtp_addr:smtp服务地址,可以在邮箱看,比如163邮箱为smtp.163.com
      @password:发信人的邮箱密码
      '''
      mail_msg = MIMEMultipart()      #创建一个带附件实例
   
      #构造附件test.docx
      att1 = MIMEText(open(r'C:\Users\HP\Desktop\0608\2017-06-18 22-33-24test_result.html','rb').read(), 'base64', 'gb2312')
      att1["Content-Type"] = 'application/octet-stream'
      att1.add_header('Content-Disposition', 'attachment', filename=u'测试报告.html'.encode('gbk')) 
      mail_msg.attach(att1)
      #构建MIMEText纯文本内容
      txt = MIMEText(msg,'plain', 'utf-8')
      mail_msg.attach(txt)
   
      mail_msg['Subject'] = subject
      mail_msg['From'] =from_addr
      mail_msg['To'] = ','.join(to_addrs)
      try:
          s = smtplib.SMTP()
          s.connect(smtp_addr)  #连接smtp服务器
          s.login(from_addr,password)  #登录邮箱
          s.sendmail(from_addr, to_addrs, mail_msg.as_string()) #发送邮件
          s.quit()
      print "success"
      except Exception,e:
         print str(e)
   
   
  if __name__ == '__main__':
      from_addr = "XXX"
      smtp_addr = "XXX"
      to_addrs = ["XXX"]
      subject = "send test"
      password = "XXX"
      msg = "hello,this is just a send test"
      SendMail(subject,msg,to_addrs,from_addr,smtp_addr,password)
  运行结果:
  5.定时执行测试用例
  问题和挑战:
  1.接口文档更新不及时,导致用例数据可能与实际需要的有所出入。推荐使用SwaggerUI工具管理接口测试文档。
  2.大部分用例执行之前为了安全需要保证已登录,简单的将cookie加入请求头不管用,用session。
  3.测试报告用的是通用版(一个脚本一条记录),所有现状将一个接口下所有用例都写在一个脚本里只会有一条记录。
了解更多银行测试相关信息,可微信添加quan51testing3,备注银行测试
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号