zoukankan      html  css  js  c++  java
  • 2020面试记录2

    一、软件的生命周期

          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
    测试进阶轨迹
  • 相关阅读:
    iframe和DataForm
    django文件上传
    MySQL 对于千万级的大表要怎么优化?
    mysql myisam转innodb的2种方法
    mysql 中order by 与group by的顺序
    sql 时间转换问题 from_unixtime() UNIX_TIMESTAMP()
    MySQL大表优化方案
    iptables nat及端口映射
    一个不可思议的MySQL慢查分析与解决
    iptables中DNAT、SNAT和MASQUERADE的理解
  • 原文地址:https://www.cnblogs.com/yinwenbin/p/14559674.html
Copyright © 2011-2022 走看看