请选择 进入手机版 | 继续访问电脑版

湖南新梦想

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 14|回复: 0

Python3+requests+unittest接口自动化测试实战(一)

[复制链接]

2775

主题

3174

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
11260
发表于 6 天前 | 显示全部楼层 |阅读模式
 一、Requests介绍
  Requests is an elegant and simple HTTP library for [url=]Python[/url], built for human beings.

  翻译过来就是:Requests 是为人类写的一个优雅而简单的 Python HTTP 库。这个介绍很直白了,让我们先来感受一下 Requests 的威力。
  import requests

  # 发送请求
  response = requests.get(url="http://www.baidu.com/s", params={'wd':'python'})
  # 处理响应
  print(response.status_code)

  #返回



  这个请求如果用 urllib 来实现,代码如下:
  import urllib.parse
  import urllib.request

  url = "http://www.baidu.com/s"
  params = urllib.parse.urlencode({'wd':'python'})
  # 发送请求
  response = urllib.request.urlopen('?'.join([url, params]))
  # 处理响应
  print(response.getcode())

  #返回



  从感官上就能看出来,使用 urllib 在 URL 、参数等方面会复杂一些。这只是冰山一角,实际使用中 Requests 还有好多方面超越 urllib ,它并不是浪得虚名,接下来的学习中你就会感受到。
  二、unittest介绍
  说到 Python 的[url=]单元测试[/url]框架,想必接触过 Python 的朋友脑袋里第一个想到的就是unittest。 的确,作为 Python 的标准库,它很优秀,并被广泛用于各个项目。但你知道吗?其实在 Python 众多项目中,主流的单元测试框架远不止这一个。
  本系列[url=]文章[/url]将为大家介绍目前流行的 Python 的单元测试框架,讲讲它们的功能和特点并比较其异同,以让大家在面对不同场景、不同需求的时候,能够权衡利弊,选择最佳的单元测试框架。
  三、Python3+requests+unittest
  首先,我们可以捋一捋思路,想一想[url=]接口测试[/url]的流程
  其次,选择合适的框架。
  流程清晰之后,我们需要选择一个合适的框架,于是选择了Python3+requests+unittest框架。
  Requests模块发送http的网络请求,请求类型主要包含了post,get, PUT,DELETE,HEAD。python+unittest单元测试框架构成,和测试报告生成(HTMLTestRunner)。框架详解不在此赘述。
  基于以上,我们来一步步搭建我们的框架。在这个过程中,我们需要做到业务和数据的分离,这样才能灵活,达到我们写框架的目的。接下来,我们来进行结构的划分。
  我们的结构是这样的:
  data:存放[url=]自动化测试[/url]所用到的数据文档。
  log:存放生成的日志文件。
  base:存放公共的方法。
  report:存放生成的自动化测试报告。
  testcase:存放测试脚本。
  接下来,公共方法的开发
  整体结构有了划分,接下来就该一步步的填充整个框架了,我们先来看看Base文件中的公共类或函数,这主要用于后续测试case的调用,所有公共的、一成不变的数据都可以放在这里,维护也方便。
  配置文档如下:
  [DATABASE]
  data_address = ./data/
  report_address = ./report/

  [HTTP]
  base_url = http://xxx.xx



  想知道怎样从配置文档中得到或写入相应的数据吗?那继续看吧。
  import os
  import configparser

  # 获取当前py文件地址
  proDir = os.path.split(os.path.realpath(__file__))[0]
  # 组合config文件地址
  configPath = os.path.join(proDir,"config.ini")
  classReadConfig:
      def __init__(self):
          #获取当前路径下的配置文件
          self.cf = configparser.ConfigParser()
          self.cf.read(configPath)
      def get_config(self,field,key):
          #获取配置文件中的key值
          result = self.cf.get(field,key)
          return result
      def set_config(self,field,key,value):
          #向配置文件中写入配置信息
          fb = open(configPath,'w')
          self.cf.set(field,key,value)
          self.cf.write(fb)


  那问题又来了,我们的测试数据放在哪里?怎么取值?怎么写入?怎么保存?
  别急,接着往下看。
  测试数据优先考虑放在excel或database中,此处以excel为例做个简单介绍。
  这里需要用到两个操作表格的库,xlrd数据驱动的读取,作用于excel文档,但xlrd不能写入数据,所以引入xlutils数据驱动的读取和写入。
  安装方法可以用pip3 install xlrd和pip3 install xlutils 来安装。
  import xlrd
  import xlutils.copy
  from Base.readConfig import ReadConfig
  import tim
  class ReadExcel:
      def __init__(self,section,field,sheet):
          # 打开工作表,并定位到sheet
          data_address = ReadConfig().get_config(section,field)
          workbook = xlrd.open_workbook(data_address)
          self.table = workbook.sheets()[sheet]
      def get_rows(self):
          # 获取excel行数
          rows = self.table.nrows
          return rows
      def get_cell(self,row,col):
          # 获取单元格数据
          cell_data = self.table.cell(row,col).value
          return cell_data
      def get_col(self,col):
          # 获取整列数据
          col_data = self.table.col_value(col)
          return col_data
      class WriteExcel:
      def __init__(self,section,field,sheet):
          # 打开工作表
          self.address = ReadConfig().get_config(section,field)
          self.workbook = xlrd.open_workbook(self.address)
          self.wf = xlutils.copy.copy(self.workbook)
          self.ws = self.wf.get_sheet(sheet)

      def set_cell(self,row,col,value):
          #设置单元格数据
          self.ws.write(row,col,value)

      def save_excel(self,filename,format):
          #获取当前时间
          self.time = time.strftime("%Y%m%d%H%M%S", time.localtime())
          #生成文件的文件名及格式
          self.report = filename + '_' +self.time + format
          #保存文件
          self.wf.save(self.report)



                                                                  (未完待续)

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|湖南新梦想 ( 湘ICP备18019834号-2 )

GMT+8, 2022-6-29 13:50 , Processed in 0.040810 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表