一、软件的生命周期
1、问题定义
要求系统分析员与用户进行交流,弄清“用户需要计算机解决什么问题”然后提出关于“系统目标与范围的说明”,提交用户审查和确认。
2、可行性研究
一方面在于把待开发的系统的目标以明确的语言描述出来,另一方面从经济、技术、法律等多方面进行可行性分析。
3、需求分析
弄清用户对软件系统的全部需求,编写需求规格说明书和初步的用户手册,提交评审。
4、开发阶段
开发阶段由四个阶段组成:概要设计、详细设计、实现、测试
5、维护
维护包括四个方面:
(1)改正性维护:在软件交付使用后,由于开发测试时的不彻底、不完全、必然会有一部分隐藏的错误被带到运行阶段,这些隐藏的错误在某些特定的使用环境下就会暴露。
(2)适应性维护:是为适应环境的变化而修改软件的活动。
(3)完善性维护:是根据用户在使用过程中提出的一些建设性意见而进行的维护活动。
(4)预防性维护:是为了进一步改善软件系统的可维护性和可靠性,并为以后的改进奠定基础。
研发的生命周期:需求分析、研发计划、设计、编码、测试、运行维修。
测试的生命周期:需求分析、测试计划、测试设计(测试用例)、测试开发(自动化脚本)、测试执行、测试报告
二、单元、集成、系统、验收
单元 | 集成 | 系统 | 验收 | |
测试阶段 | 编码后或编码前 | 单元测试后 | 集成测试后 | 系统测试后 |
测试对象 | 最小模块 | 模块之间的接口 | 整个系统(软+硬) | 整个系统(软+硬) |
测试人员 | 白盒或开发工程师 | 白盒或开发工程师 | 黑盒工程师 | 黑盒工程师 |
测试依据 | 单元测试的模块+概要设计文档 | 单元测试的模块+概要设计文档 | 需求规格说明书 | 主要为最终用户或需求方 |
测试方法 | 白盒+黑盒测试 | 白盒+黑盒测试 | 黑盒 | 黑盒 |
测试内容 |
模块接口测试、局部数据结构测试、路径测试、 错误处理测试、边界测试 |
模块之间数据传输、模块之间功能冲突、模块组装功能的正确性、 全局数据结构、单模块缺陷对系统的影响 |
功能、界面、可靠性、易用性、性能、兼容性、 安全性等 |
和系统测试一样 |
三、测试中遇到的难点
1、偶现的bug(页面特殊情况操作出来的、后端并发问题、后端异常逻辑没考虑到同时测试也没有考虑到)
示例1:房间状态的变化会引起可用房量变化,测试中发现可用房量比实际可用房量要多,正常操作没法复现;(没有考虑并发)
于是考虑到是否跟并发有关,后来用jmeter多线程复现了该问题
事例2:测试报表发现研发修复的bug实际没有修复,然而研发确信是修复了的。(了解业务逻辑,但是不了解实现逻辑)
询问报表负责人,才了解到夜审是用的消息队列,导致消息通知可能会跑到研发本地环境。而研发本地是在另一个没有修复该bug的分支上面;
2、数据准备(脚本)
3、测试边界、回归测试内容
四、测试需要会哪些东西
1、懂业务
2、懂技术(用例设计、java和python语言、自动化框架、CI/CD集成)
3、懂实现
五、接口用例的设计
1、安全性(用户认证、敏感信息加密、访问无权限的接口)
2、功能性(根据功能测试用例来设计、同时可以设计页面完成不了的异常场景)
3、并发测试(响应时间、数据正确性)
六、hbase、es、kafka
HBase是在HDFS的基础之上构建的,HDFS是分布式文件系统。
HBase可以以低成本来存储海量的数据并且支持高并发随机写和实时查询
分布式搜索引擎「Elasticsearch」,主要用于检索。
Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的。
这三个产品被设计成一个集成解决方案,称为“Elastic Stack”(以前称为“ELK stack”)
消息中间件(ActiveMQ、RabbitMQ,Kafka)
应用场景:削峰/限流 ,比如抢购
作用:异步、解耦
取数据的方式
1、生产者将数据放到消息队列中,消息队列有数据了,主动叫消费者去拿(俗称push)
2、消费者不断去轮训消息队列,看看有没有新的数据,如果有就消费(俗称pull)
消息队列2种消息传递模型 -- 队列(Queue)和主题(Topic)
1、点对点 Queue消息传递模型
2、发布/订阅 Topic消息传递模型=
七、python常用的模块
1、数据库: cx_Oracle、redis、pymongo、pymysql、pymssql
2、requests(接口)、selenium(UI)
3、其他的常用模块:os、time、datetime
4、文件
表格文件xlrd:
import yaml, xlrd, xlwt from xlutils.copy import copy try: filepath = r'.marketcode.xlsx' file = xlrd.open_workbook(filepath) # 打开excel文件工作簿 me = file.sheets()[0] # 指定到具体sheet nrows = me.nrows # 读行数 # 读取0行0列的值 v=me.cell(0, 0).value print('======',v) newwb =copy(file) s = newwb .get_sheet(0) # 取sheet表 s.write(0, 0, "pass") # 写入 0行0列写入pass newwb.save(filepath) # 保存至result路径 file = xlrd.open_workbook(filepath) # 打开excel文件工作簿 me = file.sheets()[0] # 指定到具体sheet v = me.cell(0, 0).value print('======', v) except Exception as e: print("数据错误,请检查表格",e)
表格文件xlwt:直接创建xlwt.Workbook
yaml、json、txt、csv文件:使用with open(路径,操作类型) ad f,然后根据各自的读取器读取内容
八、自动化测试框架的核心思想
将常用的脚本代码或者测试逻辑进行抽象和总结,
然后将这些进行面向对象设计,将需要复用的代码封装到可公用的类方法中。
通过调用公用类方法,测试类中的脚本复杂度会被大大降低,让更多脚本能力不强的测试人员来实施自动化测试
搭建UI自动化测试框架的步骤:
1. 将手工操作的功能用简单的自动化代码实现
2. 将重复高的代码或者业务逻辑进行封装,在单独的类中进行封装方法的编写
3. 根据测试业务,选择数据驱动框架或者关键字框架,上述讲述的是数据驱动。
4. 将框架中公用的类进行单独封装,如测试数据处理,数据库操作,发送邮件操作,日志记录等功能进行类方法的封装实现
5. 采用Page Object基于控件的设计模式思想和unittest框架编写测试脚本,使用框架进行自动化测试
搭建接口自动化测试框架的步骤:
1. 将普通的接口用简单的自动化代码实现
2. 将测试数据和测试代码分离,即实体类和测试类分开
3. 将公用的方法抽象封装到基类方法中,继承基类即可
4. 将框架中公用的类进行单独封装,如读取配置文件,数据库操作,发送邮件操作,日志记录等功能进行类方法的封装实现
5. 采用unittest框架编写测试脚本,使用框架进行自动化测试
九、跨域、hosts
浏览器因为安全策略,会涉及到跨域的问题;
hosts的优先级在dns解析的前面,所以设置hosts可以不用dns解析而直接访问对应的地址
十、python,try..except...finally
def demo(): try: print(1 + 2) return "测试1" except Exception as e: print(e) finally: print("finally内容") return "测试2" if __name__ == '__main__': print(demo()) # 3 # finally内容 # 测试2 # 一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。但只有一个分支会被执行,类似else # finally是不管什么情况都会执行的,且finally的return会覆盖try中的return