毕业设计-某游戏社区项目(22期)

一、背景介绍

  • 项目名称:某游戏社区平台项目(Game platform)
  • 项目简介:Game platform is a completely free APK downloader. You can get the latest popular games and tools for Android on this platform. All mods are safe and ad-free. Download 100% working mods with Game platform App from now on!!。
    二、业务介绍
    模块:
  • 首页
  • 游戏详情页
  • mod详情页
  • 我的游戏
  • 个人
  • 设置

三、架构介绍
有3套环境,测试环境(test)、予发布环境(pre)、生产环境(prod)

app-test工程展现层3个服务,网关层2个服务,微服务层8个服务,中间件1个

console-test工程展现层1个服务,网关层1个服务,微服务层1个服务

四、测试方案
可以把自动化测试框架主体分为两部分,一个是内部框架,一个是外部框架,内部框架就是我们自己实现的测试框架代码,外部框架就是抛开我们实现的核心代码,要达到自动化测试框架设计的一些内容时用到的一些第三方工具。
1、内部框架
也就是分层框架,目的在于更好的优化和管理测试用例,更便捷的进行数据、元素、脚本的维护和更快速的创建新脚本
包含公用方法封装、与业务无关方法的封装、配置文件的统一管理、第三方库的管理、运行日志的采集、用例管理、数据驱动管理、执行报告收集等。

├── common                        放全局变量的目录
│   ├── __init__.py
│   ├── getpath.py            定义了部分文件夹的路径
│   ├── header_manage.py      请求头定义与管理
│   ├── grpc_request.py       grpc请求方法
│   ├── http_request.py       http请求方法
│   └── yamlread.py           读取yaml文件 
├── config                        放配置文件的目录
│   ├── __init__.py
│   ├── env.yaml              定义执行环境的配置文件
│   ├── logging.conf          定义log等级和样式的配置文件
│   └── read_yaml.py          读yaml的文件(不用)
├── func                          放proto及其生成文件
│   ├── compileproto          放解析proto生成的py文件
│   ├── proto                 proto项目
│   ├── __init__.py
│   ├── compile_proto.py      编译proto为py文件
│   └── proto_init.py         也是编译proto为py文件(另一种方式)
│   └── get_pb2_services.py   写grpc连接文件
│   └── get_conn.py           get_pb2_services.py生成的grpc连接文件
 
├── lib                             
│   └── __init__.py
│   └── email_client.py       读取邮箱验证码          
├── log                           放log的目录(无需操作)
│   ├── __init__.py         
│   └── test.log
├── report                        放测试报告的目录(无需操作)
│   └── __init__.py
│   ├── html                测试报告
│   ├── result              测试结果

├── test_cases                     放测试用例的目录
│   ├── __init__.py
│   ├── test_GetConfig.py
│   ├── test_Login.py                   登陆测试用例
│   ├── test_sendVerificationCode.py    发送验证码的测试用例,读取yaml版
│   ├── TestSendVerificationCode.py     发送验证码的测试用例,测试版
│   └── yaml_read_demo1.py              读取yaml文件的demo
├── test_datas                    放测试数据的目录
│   ├── __init__.py
│   ├── test2.yaml
│   ├── test_login.yaml                 登陆的测试用例文件
│   └── test_sendVerificationcode.yaml  发送验证码的测试用例文件
├── .gitignore                      定义不上传到git的文件或目录
├── conftest.py                     公用方法
├── main.py                         项目入口
├── pytest.ini                      pytest配置文件
├── README.md                       本文件
├── requirememts.txt                记录项目依赖包的文件
└── requirements_int.sh             安装项目依赖包的脚本,初始化项目请先执行次文件

2、外部框架
用以实现持续集成、自动部署、脚本执行、远程调用、报告优化、报告发送等功能性框架,实现自动化框架设计原则的一些外围的组件。
代码管理:gitlab仓库,建主干和分支
持续集成部署:首选Jenkins集成,现有shell自动部署脚本备用
执行结果通知:小呱推送到相关飞书群
3、测试痛点
痛点1:需要同时支持http协议和grpc协议

方案:完成封装后用户写接口时调用相同方法
技术总结与介绍:接口有2种协议,grpc协议、http协议,需要同时支持这2种协议,http协议比较好处理,可以直接采用requests库处理,grpc协议是难点,首先采用grpc的官方demo写接口,发现可封装性不高,且传参数不支持json,在https://pypi.org上找支持grpc的插件,经过调研和实践选择了grpc_requests插件。

  • 解决方案:
    1、自动从gitlab上获取proto文件并进行编译,编译后按原有层级目录保存
    2、遍历编译后的文件,获取grpc连接所需的services和method,写批量连接服务文件
    3、封装get、post、grpc请求

解决效果:
http和grpc请求的用例管理用相同的模版,用户在写用例时调用相同的方法无感知差异
痛点2:由于业务变更,接口经常有变动,虽然变动范围小,但是影响范围不好圈定
方案:主要核心接口自动化,覆盖P0-P2级用例
技术总结与介绍:用yaml管理用例,采用pytest写接口

解决效果:
1、通过env.yaml文件配置test、pre、pro切换不同的执行环境,一套脚本可以支持不同环境,灵活性强
2、版本发布后直接先执行自动化接口,在3分钟左右就可以快速完成接口测试,保证版本质量
3、接口有改动时只需更新原有用例,原来需要2天/人的投入,现在只需0.5天/人的投入
五、问题汇总

  1. 自动化产生的垃圾数据怎么处理?
  2. 有些接口需要有特殊预置条件,比如token3个月过期,过期的会话登录后更新token信息,这种情况怎么测试?
  3. 有些代码在本地运行好好的,部署到服务器后居然不能运行
    # repo = git.Repo.clone_from(url=gitlab, to_path=path)
    # remote = repo.remote()
    # # 从远程版本库拉取分支
    # remote.pull(‘master’) # 后面跟需要拉取的分支名称