文末有源码

大部分人可能做的是爬虫和web,数据分析方面的工作,今天分享个在自动化测试领域python能做什么样的事情,比如下方,是用python+pytest+allure生成的精美自动化测试报告,本文仅演示,用例个数较少,具体工作中根据项目来进行编写用例,allure测试报告现在已经非常流行,具体看下方图,测试用例个数、通过率、测试步骤执行过程、描述,都给我们详细的生成出来,这样的测试用例,拿出去给领导汇报,逼格绝对高。

1、环境配置

1、电脑配jdk 1.8+版本,allure所依赖的环境
2、allure , 单独的包,安装好后需要配环境变量
3、pytest、allure-pytest、allure-python-commons、selenium这几个通过pip安装即可
2、文件目录

1、report : 报告最终生成的目录
2、xml : xml数据文件,用来生成最终报告(中间产物)
3、20.py  自动化脚本文件
4、methods.py  用来被调用的脚本方法文件
5、start_script.py  脚本启动文件,生成报告

3、start_script.py启动脚本文件代码

主要是通过os.system执行两个命令,分别生产xml和html最终报告,clean用来清空旧目录
import os

# file_path 是自动化脚本文件
file_path = "20.py" # xmlpth是生成的xml数据文件,用来生成最终报告
xmlpath = "./xml" xmlStr = "pytest -s -q {file_path} --alluredir {xmlpath}".format(file_path=file_path, xmlpath=xmlpath)
print("xmlStr",xmlStr) # 执行命令,生成xml文件
a = os.system(xmlStr) # 生成报告,--clean会清除旧文件
htmlStr = "allure generate {0} -o ./report/ --clean".format(xmlpath)
os.system(htmlStr)

4、20.py自动化测试脚本文件

所有的方法均调用的methods.py里面

1、setup_class : 
类的初始化方法,浏览器最大化,不然有些元素找不到
2、teardown_class : 
类的销毁方法,退出驱动
3、teardown:
每个用例方法的销毁方法,我这里没用,比如应用场景:服务崩了后用来返回到首页,以不影响下个用例的执行

参数传递,见后面介绍,用上我直接复制粘贴了一个,代表2个用例,明白流程即可

5、methods.py文件

举例说明

send_key方法:

1、loc :需要传入的元素位置,定义规则是xpath=>"*****",id=>"*****",这样我用split切分=>符号后,就可以获取元素选取方式和具体xpath路径或者id名字,例如 xpath=>//*[@id='loginname'] 切分后,可以得到["xpath","//*[@id='loginname'] "],供我定位选取元素使用

2、key:需要传入的值

3、desc:用例步骤描述

4、with allure.step用来记录步骤生成allure报告

def send_key(loc,key,desc=None):
  with allure.step(desc):
    try:
      getElement(loc).send_keys(Keys.CONTROL,'a')
      getElement(loc).send_keys(key)
    except Exception as e:
      raise e
getElement方法:
供调用,需要传入上面介绍的loc
# 获取单个页面元素
def getElement(loc):
  try:
    by = loc.split("=>")[0]
    value = loc.split("=>")[1]
    element = WebDriverWait(driver, 10).until(lambda x: x.find_element(by=byTypeDict[by], value=value))
    # print(element)
    return element
  except Exception as e:
    raise e
click方法:
对于需要传入元素位置的,都要传loc
def click(loc,desc=None):
  with allure.step(desc):
    try:
      print("这里是点击方法")
      getElement(loc).click()
    except Exception as e:
      raise e
import os
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time
import allure byTypeDict = {
"xpath": By.XPATH,
"id": By.ID,
"name": By.NAME,
"class_name": By.CLASS_NAME,
"tag_name": By.TAG_NAME,
"link_text": By.LINK_TEXT,
"partial_link_text": By.PARTIAL_LINK_TEXT,
"css selector" : By.CSS_SELECTOR
} driver = webdriver.Chrome(executable_path='C:\chrome\chromedriver246.exe')
# 获取单个页面元素
def getElement(loc):
 try:
   by = loc.split("=>")[0]
   value = loc.split("=>")[1]
   element = WebDriverWait(driver, 10).until(lambda x: x.find_element(by=byTypeDict[by], value=value))
   # print(element)
   return element
  except Exception as e:
   raise e # 获取一组相同的元素,以列表形式返回
def getElements(loc):
  try:
    by = loc.split("=>")[0]
    value = loc.split("=>")[1]
    elements = WebDriverWait(driver, 5).until(lambda x: x.find_elements(by=byTypeDict[by], value=value))
    return elements
  except Exception as e:
    raise e def get_url(*args, desc=None):
  with allure.step(desc):
    try:
      driver.get(args[0])
    except Exception as e:
      raise e def wait(*args, desc=None):
  with allure.step(desc):
    try:
      time.sleep(args[0])
    except Exception as e:
      raise e def max_window(*args, **kwargs):
  try:
    driver.maximize_window()
  except Exception as e:
    raise e def close(desc=None):
  with allure.step(desc):
    try:
      driver.quit()
    except Exception as e:
      raise e def click(loc,desc=None):
  with allure.step(desc):
    try:
      print("这里是点击方法")
      getElement(loc).click()
    except Exception as e:
      raise e def send_key(loc,key,desc=None):
  with allure.step(desc):
    try:
      getElement(loc).send_keys(Keys.CONTROL,'a')
      getElement(loc).send_keys(key)
    except Exception as e:
      raise e
6、启动脚本python3 start_script.py

打印脚本执行信息,有报错的话也可以看到

7、启动脚本python3 start_script.py

切换到report目录下执行,指定报告打开的ip和端口,提示成功后会自动打开网页,也可以复制下方出现的地址打开(我这里提示http://api.meiduo.site:8083是因为我本机hosts的dns改了,你的hosts文件没改的话,不会出现此问题
allure open -h 127.0.0.1 -p 8083 ./

8、其他说明:
1、这是基于web的ui自动化,用的是selenium,后面会出基于app的appium方面的ui自动化文章,其实也实现了另外一种爬虫进行app数据抓取的功能
2、本文环境要配置正确,不然得不到想要的报告
3、具体工作实战应用比本文讲述的要复杂的多,很多基于jenkins等做批量脚本执行
4、methods.py方法要继续补充,我这里只是演示用的几个方法

源码:

公众号回复:测试报告,获取源码

python自动化测试技术-Allure的更多相关文章

  1. python自动化测试(4)-使用第三方python库技术实现

    python自动化测试(4)-使用第三方python库技术实现 1   概述 关于测试的方法论,都是建立在之前的文章里面提到的观点: 功能测试不建议做自动化 接口测试性价比最高 接口测试可以做自动化 ...

  2. python自动化测试(2)-自动化基本技术原理

    python自动化测试(2) 自动化基本技术原理 1   概述 在之前的文章里面提到过:做自动化的首要本领就是要会 透过现象看本质 ,落实到实际的IT工作中就是 透过界面看数据. 掌握上面的这样的本领 ...

  3. python自动化测试(3)- 自动化框架及工具

    python自动化测试(3) 自动化框架及工具 1   概述 手续的关于测试的方法论,都是建立在之前的文章里面提到的观点: 功能测试不建议做自动化 接口测试性价比最高 接口测试可以做自动化 后面所谈到 ...

  4. Python开发技术详解PDF

    Python开发技术详解(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1F5J9mFfHKgwhkC5KuPd0Pw 提取码:xxy3 复制这段内容后打开百度网盘手 ...

  5. 【转】推荐4个不错的Python自动化测试框架

    之前,开发团队接手一个项目并开始开发时,除了项目模块的实际开发之外,他们不得不为这个项目构建一个自动化测试框架.一个测试框架应该具有最佳的测试用例.假设(assumptions).脚本和技术来运行每一 ...

  6. 《Python自动化测试修炼宝典》线上课程已经成功入驻网易云课堂......

    <Python自动化测试修炼宝典>线上课程已经成功入驻网易云课堂...... IT测试老兵利用工作之余,亲自录制的<Python自动化测试修炼宝典>线上课程已经成功入驻网易云课 ...

  7. 历时一年《Python自动化测试实战》终于出版!!!

    一.为什么会写这本书 1.系统梳理.可以加深自己对测试知识体系的系统梳理 2.名气.增加个人的名气,比如:面试时,可以很自豪的说,我是xxxx书的作者 3.利他.帮助有需要的学习者更系统.完备的学习和 ...

  8. 《自拍教程5》Python自动化测试学习思路

    前提:熟悉测试业务及流程 任何Python自动化测试的前提,都是必须先熟悉实际测试业务. 任何脱离实际测试业务的自动化都是噱头且无实际意义! 测试的基本流程基本是: 测试需求分析,测试用例设计与评审, ...

  9. 关于《Python自动化测试实战》

    作者有话说 笔者写这本书的初心是想通过自身经验分享一些在自动化测试领域中的实用技术,能够帮助那些正在从事自动化测试相关工作或者准备转型自动化测试的测试人员.任何一门技术涵盖的知识点都是非常广泛的,可能 ...

随机推荐

  1. \_\_del\_\_

    __del__ 一.__del__ __del__也称之为析构方法 __del__会在对象被删除之前自动触发 print('主')class People: def __init__(self, na ...

  2. Python3.7离线安装Requests无法正常使用问题

    继续搬砖...... 春节前,克服了网络受限的情况下离线安装Python库文件问题,传送门如下: https://www.cnblogs.com/mrgavin/p/12202214.html htt ...

  3. Python笔记_第四篇_高阶编程_GUI编程之Tkinter_4.布局

    1. 绝对布局: 图示: 实例: import tkinter from tkinter import ttk # 创建主窗口__编程头部 win = tkinter.Tk() # 设置标题 win. ...

  4. B-树与B+树 两者的区别

    一个m阶的B树具有如下几个特征: 根结点至少有两个子女. 每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m 每一个叶子节点都包含k-1个元素,其中 m/2 < ...

  5. Python语言学习:homework1

    '''购物车程序1.启动程序后,让用户输入工资,然后打印商品列表2.允许用户根据商品编号购买商品3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒4.可随时退出,退出时,打印已购买商品和余额 ...

  6. saltstack的salt-api介绍

    一.salt-api安装 yum install salt-api pyOpenSSL -y #pyOpenSSL 生成自签证书时使用 二.生成自签名证书(ssl使用) [root@master ce ...

  7. Docker系列六: 使用Docker官方公共仓库和私有仓库

    使用公共仓库 登陆官方网站:https://hub.docker.com/   注册账号和密码 在Docker hub中创建一个资源,  create  respositories,   创建后会提示 ...

  8. thinking in java学习笔记:14章 类型信息

    14.2 Class 对象 https://github.com/zhaojiatao/javase 1.什么是Class对象,Class对象是用来做什么的? Class对象是java程序用来创建类的 ...

  9. python3下scrapy爬虫(第十四卷:scrapy+scrapy_redis+scrapyd打造分布式爬虫之执行)

    现在我们现在一个分机上引入一个SCRAPY的爬虫项目,要求数据存储在MONGODB中 现在我们需要在SETTING.PY设置我们的爬虫文件 再添加PIPELINE 注释掉的原因是爬虫执行完后,和本地存 ...

  10. Linux SSH 允许root用户远程登录和无密码登录

    1. 允许root用户远程登录 修改ssh服务配置文件 sudo vi /etc/ssh/sshd_config调整PermitRootLogin参数值为yes,如下图: 2. 允许无密码登录同上,修 ...