Django项目的烟雾测试。

django-skd-smoke的Python项目详细描述


https://travis-ci.org/steelkiwi/django-skd-smoke.svghttps://coveralls.io/repos/steelkiwi/django-skd-smoke/badge.svg?branch=master&service=githubhttps://img.shields.io/pypi/l/django-skd-smoke.svghttps://img.shields.io/pypi/v/django-skd-smoke.svghttps://img.shields.io/pypi/pyversions/django-skd-smoke.svg

此包旨在简化烟雾测试的创建。

Installation

使用pip:

$ pip install django-skd-smoke

Usage

安装后,您应该创建新的TestCase派生自 skd_smoke.SmokeTestCase并定义烟雾测试配置。 请查看演示不同用例的Examples部分。 它们与包含公共目录的example_project目录相关 django项目

Configuration

^ TestCase的{tt4}$应该包含 具有下一个结构的每个请求的元组:

(url,status,method,{'comment':None,'initialize':None,'url_kwargs':None,'request_data':None,'user_credentials':None,'redirect_to':None})
ParameterDescriptionRequired
urlplain url or urlname as stringYes
statusexpected http status code (200, 404, etc.) as ^{tt6}$Yes
methodhttp request method (GET, POST, etc.) as stringYes
commentstring which is added to ^{tt7}$ of generated test methodNo
initializecallable object to do any required initializationNo
url_argslist or callable object which returns args list to resolve url using ^{tt8}$No
url_kwargsdict or callable object which returns kwargs dict to resolve url using ^{tt8}$No
request_datadict or callable object which returns dict to pass it into http method requestNo
user_credentialsdict or callable object which returns dict to login user using ^{tt10}$No
redirect_toplain url as string which is checked if only status is one of the next: 301, 302, 303, 307No

注意!所有可调用项都将TestCase作为第一个参数,因此 你可以用它在它们之间传递状态。但是考虑到 下一步是回调使用顺序

  1. initialize
  2. url_kwargs
  3. user_credentials
  4. request_data

Examples

所有示例都取自example_project包,可以在 存储库克隆。

1.简单请求演示:
  1. 得到200
  2. 获取200,请求数据为dict
  3. 200后
  4. 使用可调用的请求数据发送302
  5. 获取302(未经授权的访问)
  6. 获取200(授权访问)
  7. 405后(不允许使用方法)
fromdjango.contrib.authimportget_user_modelfromskd_smokeimportSmokeTestCasedefget_article_data(testcase):return{'headline':'new article'}defget_user_credentials(testcase):username='test_user'password='1234'credentials={'username':username,'password':password}User=get_user_model()new_user=User.objects.create(username=username)new_user.set_password(password)new_user.save()testcase.user=new_userreturncredentialsclassSimpleSmokeTestCase(SmokeTestCase):TESTS_CONFIGURATION=(('home',200,'GET',),# 1('home',200,'GET',{'request_data':{'scrollTop':1}}),# 2('articles:create',200,'POST',),# 3('articles:create',302,'POST',{'request_data':get_article_data}),# 4('is_authenticated',302,'GET',),# 5('is_authenticated',200,'GET',{'user_credentials':get_user_credentials}),# 6('/only_post_request/',405,'GET',),# 7)

2.使用initialize回调创建多个对象以测试对象 列表。

假设您想对文章列表页进行冒烟测试,但最初 测试数据库不包含任何您可以在这里使用initialize回调 创建多篇文章。

fromskd_smokeimportSmokeTestCasefromarticles.modelsimportArticledefcreate_articles(testcase):foriinrange(3):Article.objects.create(headline='article #%s'%i)classArticlesListSmokeTestCase(SmokeTestCase):TESTS_CONFIGURATION=(('articles:articles',200,'GET',{'initialize':create_articles}# pass your func here),)

三。使用redirect_to设置测试所需登录的匿名访问 页。

fromdjango.core.urlresolversimportreversefromskd_smokeimportSmokeTestCaseclassRedirectToSmokeTestCase(SmokeTestCase):TESTS_CONFIGURATION=(('is_authenticated',302,'GET',{'redirect_to':'%s?next=%s'%(reverse('login'),reverse('is_authenticated')),'comment':'Anonymous profile access with check of redirect url'}),)

四使用url_kwargsuser_credentials回调进行测试 所有者对新创建对象的授权访问

假设您有一篇模型文章,未发布的版本可以通过 只有它的主人。可以通过在中创建用户来测试这种情况 url_kwargs回调并将用户传输到user_credentials回调。 很遗憾,您无法从用户模型中获取密码,因为它包含 哈希密码。所以您应该以纯文本形式返回密码。

当显示404页时,让smoke测试另外两种情况我们终于有了 三个测试用例:

  1. 匿名访问应该显示404页。
  2. 一些普通的用户访问也应该显示404页。
  3. 只有所有者访问返回状态为200的实际项目。
fromdjango.contrib.authimportget_user_modelfromskd_smokeimportSmokeTestCasefromarticles.modelsimportArticledefcreate_user():UserModel=get_user_model()new_user=UserModel.objects.create(username='test_user')new_user.set_password('1234')new_user.save()returnnew_userdefcreate_unpublished_article(commit=True):article=Article(headline='unpublished',published=False)ifcommit:article.save()returnarticledefcreate_article_without_owner(testcase):return{'pk':create_unpublished_article().pk}defcreate_and_return_user_credentials(testcase):user=create_user()return{'username':user.username,'password':'1234'# User contains hashed password only so we should# return it as plain text}defcreate_article_with_its_owner(testcase):owner=create_user()testcase.owner=ownerunpublished=create_unpublished_article(commit=False)unpublished.owner=ownerunpublished.save()return{'pk':unpublished.pk}defget_owner_credentials(testcase):return{'username':testcase.owner.username,'password':'1234'# User contains hashed password only}classUnpublishedArticleSmokeTestCase(SmokeTestCase):TESTS_CONFIGURATION=(('articles:article',404,'GET',{'url_kwargs':create_article_without_owner,'comment':'Anonymous access to unpublished article.'}),# 1('articles:article',404,'GET',{'url_kwargs':create_article_without_owner,'user_credentials':create_and_return_user_credentials,'comment':'Some user access to unpublished article.'}),# 2('articles:article',200,'GET',{'url_kwargs':create_article_with_its_owner,'user_credentials':get_owner_credentials,'comment':'Owner access to unpublished article.'}),# 3)

License

麻省理工学院

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java我试图使用@OneToOne作为双向映射来映射实体,但却遇到了奇怪的异常   性能Java异步如何工作?异步方法似乎不是异步运行的   java这个代码可以更短吗   线程“main”Java中的csv Java ArrayList异常。lang.NegativeArraySizeException:28   java确定LayoutManager预布局中的显示视图   java如何在FirestorePagingAdapter中通过方法onLoadingStateChanged隐藏/显示进度条?   在Java中,如何打印一个类似于中间有“过道”的座位表的2d数组?   http Java实现字节范围服务,而不使用仅使用Java api的servlet   java无法使用命名根元素生成json   java如何在注销侦听器中获取http会话id?   数组内部输入(java)?   java如何为特殊情况提供更简单的构造函数   java在swing应用程序中显示JavaFX后台   java如何启用系统。出来在eclipse中运行Junit测试时使用println()?   如何在Java中实现Oracle用户定义的聚合函数