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

news2025/1/10 12:30:47

项目背景:

  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

 
  1.  
    #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.测试报告用的是通用版(一个脚本一条记录),所有现状将一个接口下所有用例都写在一个脚本里只会有一条记录

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

 感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1167507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

css:元素居中整理水平居中、垂直居中、水平垂直居中

目录 1、水平居中1.1、行内元素1.2、块级元素 2、垂直居中2.1、单行文字2.2、多行文字2.3、图片垂直居中 3、水平垂直居中参考文章 1、水平居中 1.1、行内元素 行内元素(比如文字,span,图片等)的水平居中,其父元素中…

GDPU 数据结构 天码行空8

实验八 二叉树的建立及遍历应用 一、【实验目的】 1、掌握二叉树的建立方法 2、掌握二叉树遍历的基本方法(前序、中序、后序) 3、掌握递归二叉树遍历算法的应用 二、【实验内容】 1.构造一棵二叉树,树的形态如下图(亦见附件)所示,打印出先…

PHP foreach 循环跳过本次循环

$a [[id>1],[id>2],[id>3],[id>4],[id>5],[id>6],[id>7],[id>18],];foreach($a as $v){if($v[id] 5){continue;}$b[] $v[id];}return show_data(,$b); 结果:

Java智慧工地源码(项目端+监管端+数据大屏+APP)

智慧工地系统功能介绍 【智慧工地PC项目端功能总览】 一.项目人员管理 包括:信息管理、信息采集、证件管理、考勤管理、考勤明细、工资管理、现场统计、WIFI教育、工种管理、分包商管理、班组管理、项目管理。 1.信息管理:头像、姓名、性别、身份证、…

“AI换脸诈骗”来势汹汹,三个层面科学应对……

当前,AI技术的广泛应用为社会公众提供了个性化智能化的信息服务,也给网络诈骗带来可乘之机,如不法分子通过面部替换语音合成等方式制作虚假图像、音频、视频仿冒他人身份实施诈骗、侵害消费者合法权益。你认为AI诈骗到底应该如何防范&#xf…

热点报告 | 健身人群抵抗入冬肥,Dirtyfit引领23秋冬潮流?

您是否曾有以下困惑?打开小红书首页推荐,似乎已经被算法教育成了成熟的信息茧房,想要找到下一个热点,又忧虑一叶以障目;看着搜索框热词,又担心无法掌握热词背后的话题命脉,难以在浮光掠影中寻找…

零基础成人英语哪里可以学,柯桥成人英语培训

写作中经常会用到“有利于”的表达,一说到“有利于”,大家最先想到的是 be good for 或者 benefit,很滥,很简单,没有亮点,写作中很难提分。 还有一点,英文写作中很忌讳相同的表达反复出现&…

成集云 | 项目管理系统集成金蝶云星空ERP | 解决方案

方案介绍 项目管理系统是项目的管理者应用专门管理项目的系统软件,在有限的资源约束下,运用系统的观点、方法和理论,对项目涉及的全部工作进行有效地管理。它从项目的投资决策开始到项目结束的全过程进行计划、组织、指挥、协调、控制和评价…

从“别人家的孩子”到创业失败:人生的起伏与自我救赎

在我们的生活中,常常会遇到这样一种人,他们从小优秀,备受瞩目,是那种“别人家的孩子”。他们一路走来,无论是在学业还是工作中,都表现得极为出色,让父母引以为傲。然而,人生并非总是…

CVE-2023-45852:Viessmann Vitogate远程代码执行漏洞复现【附POC】

文章目录 Viessmann Vitogate远程代码执行漏洞(CVE-2023-45852)复现0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 Viessmann Vitogate远程代码执行漏洞(CVE-2023-45852)复现 0x01 前言 免责声明:请…

炫云客户端信用额度如何修改?

现在炫云新注册用户信用额度是100元,但是有人觉得信用额度太高了,想修改信用额度,不知道炫云的信用额度如何修改,今天就教大家如何修改炫云的信用额度。炫云的信用额度在炫云官网和客户端都可以修改。 我们先来看炫云官网如何修改…

跨境电商的地方风味:文化多样性的市场

在数字时代,世界已经变得更加紧密相连,跨越国界的电子商务已成为全球经济的一部分。随着跨境电商的兴起,不仅商品跨国流通,文化也以一种前所未有的方式融合。本文将探讨跨境电商如何推动文化多样性,以及这一市场的前景…

Redis 的另一个集群版之 Codis 集群

文章目录 一、概述二、Codis 组织架构图三、Codis 测试规划四、Codis 安装及配置4.1 安装 Codis4.2 启动 Codis Dashboard4.3 启动 Codis Proxy4.4 启动 Codis Server4.5 启动 Codis FE(可选) 五、Codis-FE 配置六、测试 Codis 服务 如果您对Redis的了解…

【借力打力】记一次由于堆栈信息不详细的错误排查方法,利用访问日志进行定位问题

【借力打力】记一次由于堆栈信息不详细的错误排查方法,利用访问日志进行定位问题 1,背景2,排查步骤2.1 调用方问题2.2 Nginx手段2.3 运维工具辅助2.4 嵌入tomcat日志记录 3,结果 1,背景 异常信息每隔50分钟显示一次&a…

FFmpeg——使用Canvas录制视频尚存问题的解决方案

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

DELPHI安卓开发如何初始化frame 生成create方法

记住名字需要一样create 点击create这时按住ctrlshiftc 弹出以后就就完成frame的初始化create方法

Map和Set(JAVA)

本篇文章建议在了解了哈希表和二叉搜索树后食用更佳。 链接: 二叉搜索树 和 哈希表 (JAVA) Map和Set都是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。 Map接口 Map是一个接口,不能直接实例化对象,如果…

kibana显示时间数据时的时区问题及时间显示格式设置

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

电源纹波示波器测试方法:示波器纹波测试步骤详解

示波器测试电源纹波的步骤 一、准备测试设备 测试之前选择一台示波器和合适的电压探头。探头有无源探头和有源探头两种,综合来讲一般选择衰减比例1:1的无源探头测量输出阻抗及频率较低的电源纹波。 二、连接电源 连接示波器探头和电源输出端,确保连接完好…

Kafka反序列化RCE漏洞(CVE-2023-34040)

漏洞描述 Spring Kafka 是 Spring Framework 生态系统中的一个模块,用于简化在 Spring 应用程序中集成 Apache Kafka 的过程,记录 (record) 指 Kafka 消息中的一条记录。 受影响版本中默认未对记录配置 ErrorHandlingDeserializer,当用户将…