川石教育
全国咨询热线:136-9172-9932
  1. 首页 > 资讯与干货 > IT资讯

用Pytest框架来实现requests类的测试自动化

作者:川石学院 日期:2022-07-28 15:13:04 点击数:

  一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就接着来谈谈关于自动化测试中的“Pytest框架来实现requests类的测试”。

JavaScript 在 selenium 自动化中的应用(图1)

  以上的测试用例都是基于unittest来实现的,根据“Python单元测试框架Pytest”所讲的内容,很容易把它变成基于Pytest框架来实现。代码如下。

  案例4-95:基于Pytest的电子商务网站自动化测试实现。

  #使用excel作为驱动,进一步优化

  import requests

  import Pytest

  from Util import util

  import allure

  class TestEbusiness:

  def setup_class(self):

  self.myutil=util()

  self.url_product="http://localhost:8000/login_action/"

  self.url_craete_order="http://localhost:8000/create_order/"

  self.url_deleted_order="http://localhost:8000/delete_orders/"

  self.token = "RNF3Y04qFeJkMwCDsTMn4gfMcyfQ2vUjXbcENLADEFyCSRp1pBdezZKwHhlSwqgE"

  self.cookie = {"csrftoken":self.token}

  #登录之前,确保数据库中没有这条数据

  @allure.feature('电子商务产品')

  @allure.story('用户模块')

  @allure.severity('Normal')

  @allure.issue("http://www.jila.com")

  @allure.testcase("http://www.testlink.com")

  def test_correctusername_discorrectpassword(self):

  """

  用例描述:正确的用户名,错误的密码

  """

  info = self.myutil.check_condition_for_user(0)

  if not info=="":

  payload={"username":info["username"],"password":info["password"],"csrfmiddlewaretoken":self.token}

  data = requests.post(self.url_product,data=payload,cookies=self.cookie)

  #验证返回码

  self.myutil.AssertEqual("200",str(data.status_code))

  #验证返回内容

  self.myutil.AssertIn("用户名或者密码错误",str(data.text))

  @allure.feature('电子商务产品')

  @allure.story('用户模块')

  @allure.severity('Normal')

  @allure.issue("http://www.jila.com")

  @allure.testcase("http://www.testlink.com")

  def test_discorrectusername_correctpassword(self):

  """

  用例描述:错误的用户名,正确的密码

  """

  info = self.myutil.check_condition_for_user(1)

  if not info=="":

  payload={"username":info["username"],"password":info["password"],"csrfmiddlewaretoken":self.token}

  data = requests.post(self.url_product,data=payload,cookies=self.cookie)

  #验证返回码

  self.myutil.AssertEqual("200",str(data.status_code))

  #验证返回内容

  self.myutil.AssertIn("用户名或者密码错误" ,str(data.text))

  @allure.feature('电子商务产品')

  @allure.story('用户模块')

  @allure.severity('Critical')

  @allure.issue("http://www.jila.com")

  @allure.testcase("http://www.testlink.com")

  def test_discorrectusername_discorrectpassword(self):

  """

  用例描述:错误的用户名,错误的密码

  """

  info = self.myutil.check_condition_for_user(2)

  if not info=="":

  payload={"username":info["username"],"password":info["password"],"csrfmiddlewaretoken":self.token}

  data = requests.post(self.url_product,data=payload,cookies=self.cookie)

  #验证返回码

  self.myutil.AssertEqual("200",str(data.status_code))

  #验证返回内容

  self.myutil.AssertIn("用户名或者密码错误",str(data.text))

  @allure.feature('电子商务产品')

  @allure.story('用户模块')

  @allure.severity('blocker')

  @allure.issue("http://www.jila.com")

  @allure.testcase("http://www.testlink.com")

  def test_correctusername_correctpassword(self):

  """

  用例描述: 正确的用户名,正确的密码

  """

  info = self.myutil.check_condition_for_user(3)

  if not info=="":

  payload={"username":info["username"],"password":info["password"],"csrfmiddlewaretoken":self.token}

  data = requests.post(self.url_product,data=payload,cookies=self.cookie)

  #验证返回码

  self.myutil.AssertEqual("200",str(data.status_code))

  #验证返回内容

  self.myutil.AssertIn("电子商务系统" ,str(data.text))

  @allure.feature('电子商务产品')

  @allure.story('订单模块')

  @allure.severity('blocker')

  @allure.issue("http://www.jila.com")

  @allure.testcase("http://www.testlink.com")

  def test_create_order(self):

  """

  用例描述:检查创建订单

  """

  #初始化订单测试数据

  info = self.myutil.check_condition_for_order()

  mysession = requests.Session()#关联session对象建立

  payload={"username":info["username"],"password":info["password"],"csrfmiddlewaretoken":self.token}#用户登录参数

  data = mysession.post(self.url_product,data=payload,cookies=self.cookie)#模拟用户登录

  payload={"address":info["address_id"],"csrfmiddlewaretoken":self.token}#创建订单参数

  self.cookie.update({"1":"1","2":"2","3":"3"})#创建产品id,分别为id=1、id=2、id=3号

  data = mysession.post(self.url_craete_order,data=payload,cookies=self.cookie)#创建订单

  #验证返回码

  self.myutil.AssertEqual("200",str(data.status_code))

  #验证返回内容

  self.myutil.AssertIn("生成时间",str(data.text))

  #验证完毕删除订单

  self.myutil.delete_order(info["user_id"])

  @allure.feature('电子商务产品')

  @allure.story('订单模块')

  @allure.severity('blocker')

  @allure.issue("http://www.jila.com")

  @allure.testcase("http://www.testlink.com")

  def test_delete_order(self):

  """

  用例描述:检查删除订单

  """

  #初始化订单测试数据

  info = self.myutil.check_condition_for_order()

  #建立订单

  orders_id = self.myutil.create_order(info["address_id"],info["user_id"])

  mysession = requests.Session()#关联session对象建立

  payload={"username":info["username"],"password":info["password"],"csrfmiddlewaretoken":self.token}#用户登录参数

  data = mysession.post(self.url_product,data=payload,cookies=self.cookie)#模拟用户登录

  payload={"address":info["address_id"],"csrfmiddlewaretoken":self.token}#创建订单参数

  self.cookie.update({"1":"1","2":"2","3":"3"})#创建产品id,分别为id=1、id=2、id=3号

  data = mysession.post(self.url_deleted_order+str(orders_id)+"/3/",data=payload,cookies=self.cookie)#创建订单

  #验证返回码

  self.myutil.AssertEqual("200",str(data.status_code))

  #验证返回内容

  self.myutil.AssertNotIn("删除",str(data.text))

  if __name__ == '__main__':

  Pytest.main(['-sv','-q','--alluredir','./report/xml'])

  运行结果如下。

  …

  -- Docs: https://docs.Pytest.org/en/latest/warnings.html

  [33m[1m==================== 6 passed,5 warnings in 6.97 seconds =====================[0m

  采用了Pytest框架,配合Pytest-xdist的组件,测试用例可以并发运行。Pytest-xdist安装方法如下。

  C:\Users\xiang>pip3 install Pytest-xdist

  把上面的测试用例拆分为六个文件,每个文件仅包含一个测试用例,比如test_create_order()可以作为以下测试用例。

  import requests

  import Pytest

  from Util import util

  class TestEbusiness:

  def setup_class(self):

  self.myutil=util()

  self.url_product="http://localhost:8000/login_action/"

  self.url_craete_order="http://localhost:8000/create_order/"

  self.url_deleted_order="http://localhost:8000/delete_orders/"

  self.token = "RNF3Y04qFeJkMwCDsTMn4gfMcyfQ2vUjXbcENLADEFyCSRp1pBdezZKwHhlSwqgE"

  self.cookie = {"csrftoken":self.token}

  def test_create_order(self):

  """

  用例描述:检查创建订单

  """

  #初始化订单测试数据

  info = self.myutil.check_condition_for_order()

  mysession = requests.Session()#关联session对象建立

  payload={"username":info["username"],"password":info["password"],"csrfmiddlewaretoken":self.token}#用户登录参数

  data = mysession.post(self.url_product,data=payload,cookies=self.cookie)#模拟用户登录

  payload={"address":info["address_id"],"csrfmiddlewaretoken":self.token}#创建订单参数

  self.cookie.update({"1":"1","2":"2","3":"3"})#创建产品id,分别为id=1、id=2、id=3号

  data = mysession.post(self.url_craete_order,data=payload,cookies=self.cookie)#创建订单

  #验证返回码

  self.myutil.AssertEqual("200",str(data.status_code))

  #验证返回内容

  self.myutil.AssertIn("生成时间",str(data.text))

  #验证完毕删除订单

  self.myutil.delete_order(info["user_id"])

  if __name__ == '__main__':

  Pytest.main(['-sv','-q','--alluredir','./report/xml'])

  通过如下命令,可以在同一时刻运行3个测试用例。

  C:\Users\xiang\Desktop\code\for_teacher\requests\Pytest\concurrency>pytest -n 3

  运行结果如下。

  =================================================================================== test session starts ====================================================================================

  platform win32 -- Python 3.7.1,Pytest-4.5.0,py-1.7.0,pluggy-0.4.0

  rootdir: C:\Users\Jerry\Desktop\code\for_teacher\requests\Pytest\concurrency

  plugins: xdist-1.28.0,parallel-0.0.9,forked-1.0.2,allure-Pytest-2.6.3

  gw0 [6] / gw1 [6] / gw2 [6]

  ...... [100%]

  ================================================================================= 6 passed in 3.92 seconds =================================================================================

  比较一下,在非并发情况下6个测试用例运行共耗时6.97秒,在并发情况下仅用例3.92秒。


相关文章
  • 亚马逊运营成功转行软件测试,薪资13K表示很满意!2022-07-28 15:13:04
  • 西安川石的兰朋友喊你来当他的学弟学妹啦!2022-07-28 15:13:04
  • 国外的月亮也不一定比国内测试猿的年薪美~2022-07-28 15:13:04
  • 建筑工程专业朱同学成功转行为软件测试人!2022-07-28 15:13:04
  • 财务管理专业转行软件测试月薪甩会计几条街!2022-07-28 15:13:04
  • 只有技术沉淀才能成功上岸,深圳就业薪资13K!2022-07-28 15:13:04
  • 薪资11K!实现自我价值,从掌握一门IT技术开始...2022-07-28 15:13:04
  • 文科生转行软件测试照样拿下高薪15K!2022-07-28 15:13:04
  • 恭喜罗同学喜提19.5K,成功入行软件测试!2022-07-28 15:13:04
  • 毕业1年,迷茫的他最终选择转行软件测试2022-07-28 15:13:04