当前位置:   article > 正文

【软件测试】银行项目具体操作流程_银行系统项目启动流程

银行系统项目启动流程

项目背景:

  XXXX银行项目采用的是B/S架构,主要是为了解决银行业务中的柜员、凭证、现金、账务等来自存款、贷款、会计模块的管理。

手工弊端:

1.项目业务复杂度高,回归测试工作量大
2.单个接口功能比较简单,容易实现自动化集成,且相对UI更稳定,更能达到监控项目质量的目的
3.从前后端分离的角度说,只依赖前端限制并不能满足安全要求

优化方案及工具选择:

Postman:

  功能强大Chrome插件,界面好看响应格式自主选择,缺点支持的协议单一且不能数据分离,比较麻烦的还有不是所有的公司都能上谷歌
SoupUI:

  支持多协议(http\soup\rest等),能实现功能和性能测试的开源接口测试工具,灵活性高可在此基础上开发脚本,缺点上手比较难
Jmeter:

  Java御用的接口压力测试工具,做接口功能测试有点大材小用,缺点不能生成可视化的接口测试报告

综上:手动开发比较合适

框架原理:

采用数据驱动模式,将数据和业务逻辑分离,完成测试用例编写-》测试用例执行-》测试报告发送的目的

测试用例格式编写如下:

代码实现:

注:为了数据脱敏,以百度翻译接口为例

1.读取测试用例数据data.py

  1. # coding=utf-8
  2. import json
  3. import xlrd
  4. import sys
  5. reload(sys)
  6. sys.setdefaultencoding('utf-8')
  7. def tableToJson():
  8. source = xlrd.open_workbook(r"C:\Users\HP\Desktop\0608\InterfaceData.xlsx")
  9. table = source.sheet_by_index(0)
  10. list = [] # 字典列表
  11. totalList = [] # json列表
  12. for i in xrange(1,2): #获取第i个表第2行起的值作为用例的参数
  13. keys = table.col_values(1) # 获取第i个表第2列的值
  14. keys.pop(0)
  15. for j in xrange(3, table.ncols):
  16. test_value = table.col_values(j) # 获取第i个表第4列起的值作为用例的参数值
  17. test_value.pop(0)
  18. for k in range(len(test_value)):
  19. s = test_value[k]
  20. # print s
  21. data = dict(zip(keys, test_value)) # 等长两列表转为字典
  22. list.append(data)
  23. data = {}
  24. data[table.name] = list
  25. list = []
  26. data_to_json = json.dumps(data, ensure_ascii=False, encoding="gb2312") # 将列表中的unicode转中文
  27. print u"用例数据:", data_to_json
  28. totalList.append(data_to_json)
  29. return totalList
  30. if __name__ == '__main__':
  31. jsonData = tableToJson()
  32. # 写入文件
  33. f = open(r"F:\TestData0618.json", 'w+')
  34. for i in jsonData:
  35. f.write(i)
  36. f.write('\n')
  37. f.close()

 运行结果:

2.执行测试用例test.py

  1. #coding=utf-8
  2. import requests
  3. import unittest
  4. import json
  5. class MyTest(unittest.TestCase): # 封装测试环境的初始化和还原的类
  6. def setUp(self):
  7. print("start test")
  8. def tearDown(self):
  9. print("end test")
  10. class Test_transapi(MyTest): # 一个接口封装一个类
  11. @staticmethod
  12. def getParams():
  13. Data = open(r"F:\TestData0618.json").read()
  14. temp = eval(Data) #type(Data)为str,type(temp)为dict
  15. data = temp['2100']
  16. return data
  17. def test_transapi(self):
  18. self.url = "http://fanyi.baidu.com/v2transapi"
  19. self.headers = {
  20. 'Host': 'fanyi.baidu.com',
  21. 'Upgrade-Insecure-Requests': '1',
  22. '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',
  23. 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
  24. 'Accept-Encoding': 'gzip, deflate, sdch, br',
  25. 'Accept-Language': 'zh-CN,zh;q=0.8',
  26. 'Cache-Control': 'max-age=0',
  27. 'Connection': 'keep-alive'}
  28. data = self.getParams()
  29. for i in data:
  30. print i
  31. self.params = i
  32. #print u'参数:',self.params
  33. r = requests.get(url=self.url, params=self.params,headers=self.headers)
  34. #print (r.text)
  35. print (r.status_code)
  36. self.assertEqual(200,r.status_code)
  37. if __name__=="__main__":
  38. unittest.main()

 运行结果:

3.构建测试报告run.py

  1. #coding=utf-8
  2. from HTMLTestRunner import HTMLTestRunner
  3. import time
  4. import unittest
  5. #定义测试用例的目录为当前目录
  6. test_dir = r'C:\Users\HP\Desktop\0608'
  7. discover = unittest.defaultTestLoader.discover(test_dir,pattern = 'test*.py')
  8. if __name__=="__main__":
  9. #按照一定的格式获取当前的时间
  10. now = time.strftime("%Y-%m-%d %H-%M-%S")
  11. #定义报告存放路径
  12. filename =test_dir + '/' + now + 'test_result.html'
  13. fp = open(filename,"wb")
  14. #定义测试报告
  15. runner = HTMLTestRunner(stream = fp,
  16. title = u"2100接口测试报告",
  17. description = u"测试用例执行情况:")
  18. #运行测试
  19. runner.run(discover)
  20. fp.close() #关闭报告文件

 运行结果:

4.发送测试报告send.py

  1. #coding=utf-8
  2. import smtplib
  3. from email.mime.text import MIMEText
  4. from email.mime.multipart import MIMEMultipart
  5. def SendMail(subject,msg,to_addrs,from_addr,smtp_addr,password):
  6. '''
  7. @subject:邮件主题
  8. @msg:邮件内容
  9. @to_addrs:收信人的邮箱地址
  10. @from_addr:发信人的邮箱地址
  11. @smtp_addr:smtp服务地址,可以在邮箱看,比如163邮箱为smtp.163.com
  12. @password:发信人的邮箱密码
  13. '''
  14. mail_msg = MIMEMultipart() #创建一个带附件实例
  15. #构造附件test.docx
  16. att1 = MIMEText(open(r'C:\Users\HP\Desktop\0608\2017-06-18 22-33-24test_result.html','rb').read(), 'base64', 'gb2312')
  17. att1["Content-Type"] = 'application/octet-stream'
  18. att1.add_header('Content-Disposition', 'attachment', filename=u'测试报告.html'.encode('gbk'))
  19. mail_msg.attach(att1)
  20. #构建MIMEText纯文本内容
  21. txt = MIMEText(msg,'plain', 'utf-8')
  22. mail_msg.attach(txt)
  23. mail_msg['Subject'] = subject
  24. mail_msg['From'] =from_addr
  25. mail_msg['To'] = ','.join(to_addrs)
  26. try:
  27. s = smtplib.SMTP()
  28. s.connect(smtp_addr) #连接smtp服务器
  29. s.login(from_addr,password) #登录邮箱
  30. s.sendmail(from_addr, to_addrs, mail_msg.as_string()) #发送邮件
  31. s.quit()
  32. print "success"
  33. except Exception,e:
  34. print str(e)
  35. if __name__ == '__main__':
  36. from_addr = "XXX"
  37. smtp_addr = "XXX"
  38. to_addrs = ["XXX"]
  39. subject = "send test"
  40. password = "XXX"
  41. msg = "hello,this is just a send test"
  42. SendMail(subject,msg,to_addrs,from_addr,smtp_addr,password)

 运行结果:

5.定时执行测试用例

问题和挑战:

1.接口文档更新不及时,导致用例数据可能与实际需要的有所出入。推荐使用SwaggerUI工具管理接口测试文档

2.大部分用例执行之前为了安全需要保证已登录,简单的将cookie加入请求头不管用,用session

3.测试报告用的是通用版(一个脚本一条记录),所有现状将一个接口下所有用例都写在一个脚本里只会有一条记录

4.邮件中文附件名称乱码

 

这篇贴子到这里就结束了,最后,希望看这篇帖子的朋友能够有所收获。

文中的项目我也都备好了,有需要的请回复【项目】免费领取。

下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/99393
推荐阅读
相关标签
  

闽ICP备14008679号