多测师是一家拥有先进的教学理念,强大的师资团队,业内好评甚多的接口自动化测试培训机构!

17727591462

联系电话

您现在所在位置:接口自动化测试培训 > 新闻资讯

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

更新时间:2022-08-05 09:03:15 作者:多测师 浏览:13

  一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就接着来谈谈关于自动化测试中的“Pytest框架来实现requests类的测试”。测试用例都是基于unittest来实现的,根据“Python单元测试框架Pytest”所讲的内容,很容易把它变成基于Pytest框架来实现。代码如下。

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

  案例:基于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秒。

  以上内容为大家介绍了用Pytest框架来实现requests类的自动化测试,本文由多测师亲自撰写,希望对大家有所帮助。了解更多自动化测试相关知识:https://www.aichudan.com/xwzx/

联系电话

17727591462

返回顶部