Django自身提供测试类、工具

django.test.Client

他的作用是模拟客户端。
提供一系列的方法,例如get、post、delete、login等
其中login是用django自身的验证,特殊之处是实例化的Client可以拿到session、cookie【Client.cookies、Client.session

SimpleTestCase

非数据库查询的

TransactionTestCase

有数据库操作,在测试结束后直接清空数据库。

TestCase

常用的编写测试的类,他是以事务的方式回滚数据,相对来说更好。不过有些数据库不支持,就会报错。(例如,MyISAM 引擎的 MySQL)
另外如果本身要测试的类自身带有事务属性,那么在使用这个工具处理的时候也要额外做一些操作。

LiveServerTestCase

这个比较特殊,他本身和 **TransactionTestCase **差不多,区别是本类会后台启动一个 类似runserver的服务,这样就可以使用 selenium 来做对应的请求,并且在对应的操作结束后,会和 **TransactionTestCase **一样,执行结束后清空数据库.

调研初步结论

Django测试工具优点

  1. Django提供了丰富的测试工具类,特别是关于测试过程中产生的数据处理方式【不处理、全局清理、借住事务进行回滚操作】
  2. Django提供了Client类,可以模拟客户端访问Api、View并对结果进行判断,并记录上下文需要的Cookie、Session

Django缺点

  1. 如果本身不用Django编写的程序,使用Django的测试工具编写测试用例好像于pytest编写的测试用例没啥区别。
  2. 要编写大量的代码。
  3. 与selenium交互不是很理想,几乎就丧失了对Ajax、Vue等方式的测试能力。

推荐

  1. 使用ApiPost录入Swagger,并组织一下执行的顺序,来实现无界面话的接口测试。(生成接口文档、测试用例)
  2. 是用Selenium 录制动作,并生成Python pytest脚本,来执行。

ps:再做一个程序,数据库的备份和还原

Selenium

使用Selenium IDE 浏览器插件,直接录制内容,并生成 pytest脚本

导出脚本参考

# Generated by Selenium IDE
import pytest
import time
import json
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities class TestTest2():
def setup_method(self, method):
self.driver = webdriver.Chrome()
self.vars = {} def teardown_method(self, method):
self.driver.quit() def wait_for_window(self, timeout=2):
time.sleep(round(timeout / 1000))
wh_now = self.driver.window_handles
wh_then = self.vars["window_handles"]
if len(wh_now) > len(wh_then):
return set(wh_now).difference(set(wh_then)).pop() def test_test2(self):
self.driver.get("https://www.baidu.com/")
self.driver.set_window_size(1057, 808)
self.driver.find_element(By.ID, "kw").click()
self.driver.find_element(By.ID, "kw").send_keys("Python")
self.driver.find_element(By.CSS_SELECTOR, ".bdsug-s").click()
self.driver.find_element(By.ID, "su").click()
self.vars["window_handles"] = self.driver.window_handles
self.driver.find_element(By.LINK_TEXT, "Python 集中营的博客_CSDN博客-python,java算法,框架领域...").click()
self.vars["win8739"] = self.wait_for_window(2000)
self.driver.switch_to.window(self.vars["win8739"])
self.vars["window_handles"] = self.driver.window_handles
self.driver.find_element(By.CSS_SELECTOR, "div:nth-child(1) > .blog-list-box h4").click()
self.vars["win5468"] = self.wait_for_window(2000)
self.driver.switch_to.window(self.vars["win5468"])
self.driver.find_element(By.CSS_SELECTOR, ".blog_extension_card_cont_l > .text").click()
self.driver.find_element(By.CSS_SELECTOR, ".blog_weixin_box_btn > span").click()
self.driver.find_element(By.ID, "blog_weixin_box_close").click()

Django自身提供测试类、工具-调研的更多相关文章

  1. Django单元测试(二)------测试工具

    The test client test client是一个python类,来模拟一个简单的“哑”浏览器,允许你来测试你的view函数.你可以使用test client完成下列事情: 1.模拟&quo ...

  2. 开源Web安全测试工具调研

    开源Web安全测试工具调研 http://blog.csdn.net/testing_is_believing/article/details/22302087

  3. mongoDB工具类以及测试类【java】

    java操作mongo工具类 package Utils; import com.mongodb.MongoClient; import com.mongodb.MongoCredential; im ...

  4. java并发学习--第七章 JDK提供的线程工具类

    一.ThreadLocal ThreadLocal类用于隔离多线程中使用的对象,为ThreadLocal类中传递的泛型就是要隔离的对象,简单的来说:如果我们在主线程创建了一个对象,并且需要给下面的多线 ...

  5. Python测试 ——开发工具库

    Web UI测试自动化 splinter - web UI测试工具,基于selnium封装. selenium - web UI自动化测试. mechanize- Python中有状态的程序化Web浏 ...

  6. iOS 覆盖率检测原理与增量代码测试覆盖率工具实现

    背景 对苹果开发者而言,由于平台审核周期较长,客户端代码导致的线上问题影响时间往往比较久.如果在开发.测试阶段能够提前暴露问题,就有助于避免线上事故的发生.代码覆盖率检测正是帮助开发.测试同学提前发现 ...

  7. C/C++代码静态分析工具调研

    C/C++代码静态分析工具调研 摘自:https://www.jianshu.com/p/92886d979401 简述 静态分析(static analysis)是指在不执行代码的情况下对其进行分析 ...

  8. django应用的测试

    本文章默认用户使用win10系统,并且已经安装pycharm.git.django2.2.5及配套第三方库(python3.6.0及以上版本,且为anaconda环境) 前言 其实在上一期django ...

  9. python测试开发工具库汇总(转载)

    Web UI测试自动化 splinter - web UI测试工具,基于selnium封装. selenium - web UI自动化测试. mechanize- Python中有状态的程序化Web浏 ...

  10. Android自动化测试工具调研

    原文地址:Android自动化测试工具调研 - Stars-One的杂货小窝 Android测试按测试方式分类,可分为两种:一种是传统逻辑单元测试(Junit),另外一种则是UI交互页面测试. 这里详 ...

随机推荐

  1. 带你用三种不同的工具体验AI作诗

    摘要:本实验基于华为云API Arts和API Explorer,向用户介绍诗歌生成API,指导用户使用华为云工具,体验AI作诗的过程. 本文分享自华为云社区<AI语言能力体验:通过三种不同的工 ...

  2. vue-element-admin 动态菜单改造

    vue-element-admin 动态菜单改造 vue-element-admin 是一款优秀后台前端解决方案,它基于 vue 和 element-ui实现.开源后台管理系统解决方案项目 Boot- ...

  3. STIL 格式pattern介绍

    相信很多工程师,特别是刚入行或准备入行的兄弟们或多或少听过测试相关的东西.如果你想做DFT工程师的,测试工程师的,而对于设计/验证工程师们如果能了解下STIL文件的原理,在和DFT/测试工程师聊技术聊 ...

  4. StarRocks 3.0 集群安装手册

    本文介绍如何以二进制安装包方式手动部署最新版 StarRocks 3.0集群. 什么是 StarRocks StarRocks 是新一代极速全场景 MPP (Massively Parallel Pr ...

  5. RK3568用户自定义开机画面功能

    RK方案中的开机画面处画逻辑 在RK的方案中,如RK1109,RK1126,RK3568这些嵌入式LINUX方案在开机画面的处理逻辑都是一致的. 用户的uboot,kernel开机画面都是同dts,k ...

  6. iframe分栏拖拽伸缩例子

    这个标题有些绕口,鄙人愚笨,实在找不到一个比较准确的说法,总之就是: 一个页面内显示多个iframe,一个变宽,另一个就变窄,一个变高,另一个就变矮的这种可自由伸缩的效果.它们之间有一个可多拽的分隔条 ...

  7. 2023-04-29:一个序列的 宽度 定义为该序列中最大元素和最小元素的差值。 给你一个整数数组 nums ,返回 nums 的所有非空 子序列 的 宽度之和 由于答案可能非常大,请返回对 109

    2023-04-29:一个序列的 宽度 定义为该序列中最大元素和最小元素的差值. 给你一个整数数组 nums ,返回 nums 的所有非空 子序列 的 宽度之和 由于答案可能非常大,请返回对 109 ...

  8. 在docker容器里,ffmpeg给视频文件内嵌字幕文件,不生效,如何解决?

    用ffmpeg命令,发现执行成功,但视频文件就是没有字幕.看不出问题出现在什么地方.后来直接用ffmpeg添加水印命令测试,发现是缺少字体文件,如下图所示: 报Fontconfig error: Ca ...

  9. 2021-01-03:java中,描述一下什么情况下,对象会从年轻代进入老年代?

    福哥答案2021-01-03: 1.对象的年龄超过一定阀值,-XX:MaxTenuringThreshold 可以指定该阀值.2.动态对象年龄判定,有的垃圾回收算法,比如 G1,并不要求 age 必须 ...

  10. 2022-03-24:你被请来给一个要举办高尔夫比赛的树林砍树,树林由一个 m x n 的矩阵表示, 在这个矩阵中: 0 表示障碍,无法触碰 1 表示地面,可以行走 比 1 大的数 表示有树的单元格,

    2022-03-24:你被请来给一个要举办高尔夫比赛的树林砍树,树林由一个 m x n 的矩阵表示, 在这个矩阵中: 0 表示障碍,无法触碰 1 表示地面,可以行走 比 1 大的数 表示有树的单元格, ...