zoukankan      html  css  js  c++  java
  • Python 之接口自动化测试框架完整搭建

      接口自动化框架

      一、整个框架的目录结构,本次内容着重讲解测试用例类,只要掌握了测试用例类和接口测试用例怎么写就可以运用此框架。

      common目录

      1.contants是处理项目路径模块,本项目路径全部采取相对路径(这样做的好处是copy到任意地方可以直接运行,不用担心会路径报错)

      2.handle_data处理excel用例中需要替换的参数,用来存储临时变量,和需要替换的excel用例中需要替换的字符串(注意存放临时变量时int类型应转换成str类型存放)

      3.handle_db是连接数据库(mysql)处理需要进行数据库校验的模块,封装了三个方法,分别是:获取到查询的第一条数据、获取到查询的所有数据、获取查询到的数据条数

      4.handle_request是用来发送请求的(支持cookie和token)

      5.handle_webservice是用来发送webservice类型接口的请求(用到的比较少可以忽略此模块)

      6.myconfig是读取和写入配置文件的模块

      7.mylogger是输出日志模块,用来调用代码运行的时候哪些信息需要写入日志中,方便自己调试和找出接口错误信息,哪里需要就直接调用

      8.readexcel读取excel用例数据的模块

      9.send_email是发送测试报告邮件模块

      comf配置文件

      1.日志等级和测试报告名称,项目地址,账号,和数据库连接信息修改的地方

      data存放excel用例数据

      library存放一些下载的第三方库

      1.ddt数据驱动的

      2.HTMLTestRunner生成测试报告的模块

      log存放日志

      查看日志,日志是轮转的

      reports存放测试报告

      在此文件夹下查看报告

      testcases存放用例类的模块

      所有的测试用例类必须放在此模块

      run.py测试运行程序

      整个项目只需要运行此模块就可以

      二、下面我们来详细介绍下excel中接口用例该怎么写

      这里注意下接口传入参数data里的用例1和用例2中的mobile_phone的传参为什么是#phone#,为什么不传入具体手机号,因为传入具体的手机号,测试用例只能运行一次,需要手动修改这里的测试用例数据在进行运行比较。那我们该采用什么办法呢,在代码里面随机生成手机号进行替换(后面代码中会指出),怎么替换呢首先判断每条用例数据中是否有#phone#,如果有就用生成的随机手机号进行替换,反之,就直接将接口参数传入接口中进行请求,获取结果

      还需要注意的是将表单名称进行修改,如上图中的下方,名称随意取

      讲完了excel用例,接口用例类怎么写(python基础语法就不多说)我们只讲接口的excel用例数据读取,请求接口,在进行断言,预期结果和实际结果进行比对

      # -*- coding: utf-8 -*-

      # @Time : 2019/12/5 9:23

      # @File : test_01_login__register.py

      # @Software: PyCharm

      import unittest

      import random

      from library.ddt import ddt,data

      from common.readexcel import read_excel

      from common.contants import URL_DIR

      from common.myconfig import conf

      from common.handle_request import token_http,cookie_http

      from common.mylogger import Log

      from common.handle_db import db

      @ddt

      class Testregister(unittest.TestCase):

      #传入excel用例所在的路径和表单名

      excel=read_excel(URL_DIR,"register")

      #读取用例数据

      cases=excel.read_data()

      @data(*cases)

      def test_register(self,case):

      # ------第一步:准备用例数据------------

      # 获取请求的参数

      # 增加判断,这里判断是否有请求的参数需要替换

      if "#phone#"in case["data"]:

      # 生成手机号

      phone=self.random_phone()

      # 进行替换

      case["data"]=case["data"].replace("#phone#",phone)

      data=eval(case["data"])

      # 获取请求的方法

      method=case["method"]

      # 获取请求的地址(配置文件中读取的路径+excel中的读取路径做拼接)

      url=conf.get("url_project","url")+case["url"]

      # 获取当前用例所在行

      row=case["case_id"]+1

      # 获取请求头(配置文件中读取请求头)

      headers=eval(conf.get("url_project","headers"))

      # 获取预期结果

      expected=eval(case["expected"])

      # ------第二步:发送请求到接口,获取实际结果--------

      #发送请求(传入url、请求方法、请求参数,请求头、)

      res1=token_http.send(url=url,method=method,json=data,headers=headers)

      #获取实际结果郑州哪个人流医院好 http://www.csyhjlyy.com/

      res=res1.json()

      # -------第三步:比对预期结果和实际结果-----

      try:

      #断言接口返回的code和预期结果中的code是否一致

      self.assertEqual(eval(expected["code"]),res["code"])

      #断言接口返回的msg和预期结果中的msg是否一致

      self.assertEqual(expected["msg"],res["msg"])

      #判断如果请求成功就到处数据库中去查询是否有该数据

      if res["msg"]=="ok":

      # 去数据库查询当前账号是否存在

      sql = "SELECT * FROM futureloan.member WHERE mobile_phone ={}".format(phone)

      # 获取数据库中有没有该用户信息,(用handle_db封装好的方法)

      count=self.db.count(sql)

      # 对数据库中返回的数据做断言,判断数据库中是否有一条数据

      self.assertEqual(1,count)

      except AssertionError as e :

      #回写结果到excel中的result列

      self.excel.write_data(row=row,column=8,value="未通过")

      #打印到控制台

      print("预期结果:{}".format(expected))

      print("实际结果;{}".format(res))

      #将错误信息打印到日志

      Log.info("用例:{}--------->未通过".format(case["title"]))

      Log.error(e)

      #如果有错误信息抛出错误信息

      raise e

      else:

      #回写结果到excel中的result列

      self.excel.write_data(row=row,column=8,value="通过")

      Log.info("用例:{}--------->通过".format(case["title"]))

      #随机生成手机号方法

      @staticmethod

      def random_phone():

      phone="188"

      for i in range(8):

      phone+=str(random.randint(0,9))

      return phone

      代码中部分问题

      1.上面的URL_DIR是已经拼接好的路径导入进来的,在contants下URL_DIR里修改

      2.请求地址前半部分读取conf.ini文件中的url(建议将接口中相同的请求地址放在此地方,这样就不用每次在excel中url里写入完整的接口地址)

      3.请求头存放在conf.ini文件的headers用字典的方式存放

      4.数据库校验部分需要先连接数据库,在conf.ini配置文件中填写host主机,user用户,password密码,port端口号(注:这里只支持,mysql数据库)

      请注意:框架中有许多的第三方库需要自己安装

      用例类和excel用例写好后运行run.py文件

      在reports查看测试报告

  • 相关阅读:
    【工作总结】工作三年半的不归路,希望新人借鉴
    【OpenWRT】【RT5350】【三】MakeFile文件编写规则和OpenWRT驱动开发步骤
    【OpenWRT】【RT5350】【二】烧写OpenWrt到RT5350开发板
    【OpenWRT】【RT5350】【一】OpenWrt开发环境搭建
    2013总结
    [原创]cocos2dx加载网络图片&异步加载图片
    json 对c++类的序列化(自动生成代码)
    [奇思幻想] 开发过程中的一些设想记录中(持续更新....)
    GNU Makefile编写
    c语言到汇编的学习
  • 原文地址:https://www.cnblogs.com/djw12333/p/12673525.html
Copyright © 2011-2022 走看看