AutomationTest/README.md

18 KiB
Raw Permalink Blame History

avatar

自动化测试

概况

使用

一、环境准备

1、脚本运行环境准备

1.1、安装系统依赖

  • Linux-Ubuntu:
    • apt-get install libpq-dev python3-dev 【用于psycopg2-binary所需依赖】
    • apt-get install g++ libgraphicsmagick++1-dev libboost-python-dev 【用于pgmagick所需依赖】
    • apt-get install python-pgmagick 【pgmagick所需依赖】
  • Linux-CentOS:
    • yum install python3-devel postgresql-devel 【用于psycopg2-binary所需依赖】
    • yum install GraphicsMagick-c++-devel boost boost-devel【用于pgmagick所需依赖】
  • Windows:

1.2、安装python依赖模块

1.3、安装allure

1.4、安装openjdk8或jdk8

  • sudo add-apt-repository ppa:openjdk-r/ppa
  • sudo apt-get update
  • sudo apt-get install openjdk-8-jdk

1.5、安装maven

  • 完成maven的安装配置

1.6、安装Oracle Instant Client

  • Linux
    • 安装libaio包
      • Linux-CentOS:yum install libaio
      • Linux-Ubuntu:apt-get install libaio1
    • 配置Oracle Instant Client
      • 下载地址:http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

      • 下载安装包instantclient-basic-linux.x64-18.3.0.0.0dbru.zip

      • 解压zip包,并配置/etc/profile

        • unzip instantclient-basic-linux.x64-18.3.0.0.0dbru.zip
        • export LD_LIBRARY_PATH=/home/john/oracle_instant_client/instantclient_18_3:$LD_LIBRARY_PATH
      • 中文编码设置

        import os
        os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
        
  • Windows
    • 下载地址:http://www.oracle.com/technetwork/topics/winx64soft-089540.html
    • 下载安装包instantclient-basic-windows.x64-11.2.0.4.0.zip
    • 解压zip包,并配置环境变量
      • 系统环境变量加入D:\instantclient-basic-windows.x64-11.2.0.4.0\instantclient_11_2
      • 配置中文编码,环境变量创建NLS_LANG=SIMPLIFIED CHINESE_CHINA.UTF8
    • 注意:如果使用64位,python和instantclient都需要使用64位

1.7、图像识别字库准备

  • 下载对应字库:https://github.com/tesseract-ocr/tessdata
  • 将下载的字库放到common/java/lib/tess4j/tessdata/
  • Linux
    • 安装依赖
      • Linux-Ubuntu:sudo apt install pkg-config aclocal libtool automake libleptonica-dev
      • Linux-CentOS:yum install autoconf automake libtool libjpeg-devel libpng-devel libtiff-devel zlib-devel
    • 安装leptonica下载leptonica-1.78.0.tar.gz下载地址https://github.com/DanBloomberg/leptonica/releases
      • 安装步骤同tesseract-ocr的安装
      • 修改/etc/profile添加如下内容然后source
      export LD_LIBRARY_PATH=$LD_LIBRARY_PAYT:/usr/local/lib
      export LIBLEPT_HEADERSDIR=/usr/local/include
      export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
      
    • 安装tesseract-ocr下载tesseract-4.1.1.tar.gz下载地址https://github.com/tesseract-ocr/tesseract/releases
      • ./autogen.sh
      • ./configure
      • sudo make
      • sudo make install
      • sudo ldconfig
  • Windows

2、selenium server运行环境准备

2.1、安装jdk1.8,并配置环境变量

  • export JAVA_HOME=/usr/lib/jvm/jdk8
  • export JRE_HOME=${JAVA_HOME}/jre
  • export CLASSPATH=.:{JAVA_HOME}/lib:{JRE_HOME}/lib
  • export PATH=${JAVA_HOME}/bin:$PATH

2.2、安装配置selenium

3、appium server运行环境准备

3.1、安装jdk1.8,并配置环境变量

  • export JAVA_HOME=/usr/lib/jvm/jdk8
  • export JRE_HOME=${JAVA_HOME}/jre
  • export CLASSPATH=.:{JAVA_HOME}/lib:{JRE_HOME}/lib
  • export PATH=${JAVA_HOME}/bin:$PATH

3.2、安装配置appium server

二、修改配置

  • vim config/app_ui_config.conf 配置app ui自动化的测试信息
  • vim config/web_ui_config.conf 配置web ui自动化的测试信息
  • vim config/projectName/projectName.conf 配置测试项目的信息
  • 修改性能测试负载机的系统最大打开文件数,避免并发用户数大于最大打开文件数

三、运行测试

1、API测试

  • cd AutomationTest/
  • python3 -u run_api_test.py --help
  • python3 -u run_api_test.py 运行cases/api/目录所有的用例
  • python3 -u run_api_test.py -k keyword 运行匹配关键字的用例,会匹配文件名、类名、方法名
  • python3 -u run_api_test.py -d dir 运行指定目录的用例默认运行cases/api/目录
  • python3 -u run_api_test.py -m mark 运行指定标记的用例

2、web ui测试

  • cd AutomationTest/
  • python3 -u run_web_ui_test.py --help
  • python3 -u run_web_ui_test.py 运行cases/web_ui/目录所有的用例
  • python3 -u run_web_ui_test.py -k keyword 运行匹配关键字的用例,会匹配文件名、类名、方法名
  • python3 -u run_web_ui_test.py -d dir 运行指定目录的用例默认运行cases/web_ui/目录
  • python3 -u run_web_ui_test.py -m mark 运行指定标记的用例

3、app ui测试

  • cd AutomationTest/
  • python3 -u run_app_ui_test.py --help
  • python3 -u run_app_ui_test.py 运行cases/app_ui/目录所有的用例
  • python3 -u run_app_ui_test.py -tt phone -k keyword 运行匹配关键字的用例,会匹配文件名、类名、方法名
  • python3 -u run_app_ui_test.py -tt phone -d dir 运行指定目录的用例默认运行cases/app_ui/目录
  • python3 -u run_app_ui_test.py -m mark 运行指定标记的用例

4、性能测试

  • cd AutomationTest/
  • ./start_locust_master.sh
  • ./start_locust_slave.sh

四、生成测试报告

1、API测试

  • cd AutomationTest/
  • python3 -u generate_api_test_report.py -p 9080
  • 访问地址http://ip:9080
  • 在使用Ubuntu进行报告生成时请勿使用sudo权限否则无法生成allure不支持

2、web ui测试

  • cd AutomationTest/
  • python3 -u generateReport_web_ui_test_report.py -ieport 9081 -chromeport 9082 -firefoxport 9083
  • 访问地址http://ip:908[1-3]
  • 在使用Ubuntu进行报告生成时请勿使用sudo权限否则无法生成allure不支持

3、app ui测试

  • cd AutomationTest/
  • python3 -u generateReport_app_ui_test_report.py -sp 9084
  • 访问地址http://ip:9084

在使用Ubuntu进行报告生成时请勿使用sudo权限否则无法生成allure不支持

五、项目说明

1、API测试

  • 项目
    • demoProject 例子项目

2、web ui测试

  • 元素的显式等待时间默认为30s
  • 封装的显式等待类型支持:page_objects/web_ui/wait_type.py
  • 封装的定位类型支持:page_objects/web_ui/locator_type.py
  • 默认使用4个worker进行并行测试
  • 文件下载处理暂不支持ie浏览器
  • 无头浏览器暂不支持ie浏览器
  • 项目
    • demoProject 例子项目

3、app ui测试

  • 元素的显式等待时间默认为30s
  • 封装的显式等待类型支持:page_objects/app_ui/wait_type.py
  • 封装的定位类型支持:page_objects/app_ui/locator_type.py
  • 项目
    • android
      • demoProject 例子项目

项目结构

  • base 基础请求类
  • cases 测试用例目录
  • common 公共模块
  • common_projects 每个项目的公共模块
  • config 配置文件
  • init 初始化
  • logs 日志目录
  • output 测试结果输出目录
  • packages app ui测试的安装包
  • page_objects 页面映射对象
  • pojo 存放自定义类对象
  • test_data 测试所需的测试数据目录
  • run_api_test.py 运行api测试脚本
  • run_web_ui_test.py 运行web ui测试脚本
  • run_app_ui_test.py 运行app ui测试脚本
  • generate_api_test_report.py 生成api测试报告
  • generateReport_web_ui_test_report.py 生成web ui测试报告
  • generateReport_app_ui_test_report.py 生成app ui测试报告
  • start_locust_master.sh 启动locust主节点
  • start_locust_slave.sh 启动locust从节点

编码规范

  • 统一使用python 3.6.8
  • 编码使用-*- coding:utf8 -*-,且不指定解释器
  • 类/方法的注释均写在class/def下一行并且用三个双引号形式注释
  • 局部代码注释使用#号
  • 所有中文都直接使用字符串不转换成Unicode即不是用【u'中文'】编写
  • 所有的测试模块文件都以test_projectName_moduleName.py命名
  • 所有的测试类都以Test开头类中方法(用例)都以test_开头
  • 每个测试项目都在cases目录里创建一个目录且目录都包含有api、scenrarios两个目录
  • case对应setup/teardown的fixture统一命名成fixture_[test_case_method_name]
  • 每一个模块中测试用例如果有顺序要求【主要针对ui自动化测试】则自上而下排序pytest在单个模块里会自上而下按顺序执行

pytest常用

  • @pytest.mark.skip(reason='该功能已废弃')
  • @pytest.mark.parametrize('key1,key2',[(key1_value1,key2_value2),(key1_value2,key2_value2)])
  • @pytest.mark.usefixtures('func_name')

注意点

  • 运行pytest时指定的目录内应当有conftest.py方能在其他模块中使用。@allure.step会影响fixture故在脚本中不使用@allure.step
  • 由于web ui配置的驱动是直接设置在系统环境变量app ui指定了混合应用的浏览器驱动在运行app ui时appium有可能会读取到系统的环境变量的配置故运行时请排查此情况
  • 数据库操作,所有表操作均进行单表操作,如需多表查询,使用代码进行聚合
  • web ui测试
    • 统一使用Firefox浏览器进行元素定位
    • 能用id、name、link(不常变化的链接)定位的不使用css定位能使用css定位不使用xpath定位
    • 项目使用并发运行,故编写测试用例时,应该避免模块与模块直接的用例会相互影响测试结果
  • app ui测试
    • 能用id、name、link(不常变化的链接)定位的不使用css定位能使用css定位不使用xpath定位
    • 如需要上传文件到手机或者从手机下载文件,请确保有手机对应目录的读写权限
    • 视频录制统一对单个单个case进行保证录制时间不超过3分钟且录制文件不要过大否则会引起手机内存无法存储视频 * 确认手机是否能进行视频录制执行命令adb shell screenrecord /sdcard/test.mp4能正常执行即可
    • 设备屏幕坐标系原点都在最左上角往右x轴递增往下y轴递增

进交流群

![avatar](https://github.com/yanchunhuo/resources/blob/master/wechat.png =200x)

Stargazers over time

Top Langs