标签: nose

Python 鼻子测试示例

我刚刚开始进入测试开发,并且很难理解要测试什么。那里有很多 foobar 示例,但我很难知道如何测试我的项目单元。例如,采用以下函数,它简单地将文本文件的行作为列表返回:

def getLines(filename):
    try:
        f = open(filename,'rb')
        lines = f.readlines()
        f.close()
    except:
        break
    return lines
Run Code Online (Sandbox Code Playgroud)

如果这是您的功能,您会测试什么?您不需要编写代码,如果您愿意,只需概括地告诉我即可。

谢谢

python unit-testing nose

3
推荐指数
1
解决办法
2113
查看次数

pytest - 是否可以在所有测试脚本之间运行脚本/命令?

好吧,这绝对是我的错,但我需要清理它。我的一个测试脚本相当一致(但并不总是)以一种会给其他人带来问题的方式更新我的数据库(基本上,它剥夺了测试用户对测试数据库的访问权限)。

通过在每个单独的测试之后或每个测试脚本完成之后运行一个简单的查询,我可以很容易地找出是哪个脚本导致了这种情况。

pytest, or nose2, 将执行以下操作:

run test_aaa.py
run check_db_access.py  #ideal if I could induce a crash/abort
run test_bbb.py
run check_db_access.py
...
Run Code Online (Sandbox Code Playgroud)

你明白了。是否有我可以使用的内置选项或插件?测试套件目前适用于 pytest 和nose2,因此两者都是一个选项。

编辑:这不是一个测试数据库,也不是一个加载夹具的数据库。这是许多极其复杂的实时数据库中的任何一个的快照,并且测试套件,根据其设计,应该自省数据库并弄清楚如何运行其测试(几乎所有访问都是只读的) . 这很好用,并且至少在我的特定上下文中具有许多有益的方面,但这也意味着没有拆卸或夹具负载供我使用。

python nose pytest

3
推荐指数
1
解决办法
1089
查看次数

我是一个转换为python的php程序员.请解释单元测试的重要性(或不重要性).我从未用php进行过单元测试!

我正在学习关于可靠的软件开发的一点,我意识到"轻快的踏板到奖牌代码并且没有真正的计划祈求良好的结果"方法是行不通的.

我正在寻求用坚实的做法取代我的旧(并且不可否认的不是很好)的方法.我之前从未使用过单元测试,现在还在尝试学习金字塔(这要归功于完整的文档)我还试图了解一般的单元测试如何使我受益(同样在将来添加集成测试) ,回归测试等).我读了这个介绍来探测http://ivory.idyll.org/articles/nose-intro.html,并且(不要轻浮)我看到你可以使用单元测试来测试正则表达式,看看if a=1; b=1; now does a == b.这就是我现在能看到的全部内容.我不需要这个框架.我可以使用正则表达式测试器,以及'测试'的常识.如果我要使用单元测试来查看两个变量是否相等,那么每次创建变量并将其设置为等于某个变量时,我是不是必须创建测试?文章中的例子似乎有点武断.

我的想法是开放学习单元测试的好处,但我想知道单元测试的实际应用是什么.

一句话:我之前从未使用过单元测试,所以请告诉我为什么我错了,应该开始使用测试.

干杯!!

php python unit-testing nose pyramid

2
推荐指数
1
解决办法
252
查看次数

如何知道django-nose运行测试的时间

我正在使用django-nose运行我的测试,我需要知道它们何时从我的视图/模型方法/等中运行,所以我可以跳过诸如检查缓存值或调用一些项目外部资源之类的东西,例如仅在运行测试时.

有一些环境变量可用或类似的东西会很好,所以我可以这样做:

if os.environ.get('TESTS_ARE_RUNNING'):
    # skip this
Run Code Online (Sandbox Code Playgroud)

要么

if not TESTS_ARE_RUNNING:
  # do something
Run Code Online (Sandbox Code Playgroud)

有人知道实现这个目标的方法吗?

在此先感谢任何帮助:)

testing django nose django-nose

2
推荐指数
1
解决办法
815
查看次数

nose2 vs鼻子测试发现(nose2没有找到测试)

我刚开始一个python项目,我正在尝试不同的测试框架.我遇到的问题是nose2找不到我的测试:

$ nose2 --verbose


在0.000秒内进行0测试

而鼻子测试找到了所有

$ nosetests - 仅收集

.................................


跑了33个测试在0.004s

其他我可以在同一目录下使用nose2执行单个测试:

$ nose2 myproj.client.test.mypkg.mymodule_test

.


以0.007s进行1次测试

myproj.client.test.mypkg.mymodule_test的位置如下:

'''
Created on 18/04/2013

@author: julia
'''
from unittest import TestCase, main
import os
from myproj.client.mymodule import SUT
from mock import Mock
import tempfile

class SUTTest(TestCase):
    def setUp(self):
        self.folder = tempfile.mkdtemp(suffix='myproj')
        self.sut = SUT(self.folder, Mock())
        self.sut.init()

    def test_wsName(self):
        myfolder = os.path.join(self.folder, 'myfolder')
        os.mkdir(myfolder)
        self.sut.change_dir(myfolder)
        self.assertEquals(self.SUT.name, 'myfolder')

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

我一直在看文档,我找不到可能的原因.

在MacOs 10.8.3上运行python 2.7.3

nose nosetests python-2.7

2
推荐指数
1
解决办法
3022
查看次数

Django-nose不会运行单独的TestCase类

尝试使用django-nose运行单个TestCase时出错

$ ./manage.py test someapp.ModelTest
nosetests someapp.ModelTest --nologcapture --verbosity=1
Creating test database for alias 'default'...
E
======================================================================
ERROR: Failure: AttributeError ('module' object has no attribute 'ModelTest')
----------------------------------------------------------------------
Traceback (most recent call last):
 File "/usr/lib/python2.7/site-packages/nose/loader.py", line 402, in loadTestsFromName
    module = resolve_name(addr.module)
 File "/usr/lib/python2.7/site-packages/nose/util.py", line 321, in resolve_name
    obj = getattr(obj, part)
AttributeError: 'module' object has no attribute 'ModelTest'

----------------------------------------------------------------------
Ran 1 test in 0.003s

FAILED (errors=1)
Run Code Online (Sandbox Code Playgroud)

请注意,当我$ ./manage.py test someapp成功运行它时,运行someapp/tests.py中的所有TestCase; 只有在尝试运行单个TestCase时才会失败.

django nose django-nose

2
推荐指数
1
解决办法
629
查看次数

防止函数或文件被鼻子运行?

Nose会自动运行它在项目中找到的任何函数test_*.所以,例如,如果有一个函数叫:

"""
test_server_setup.py
sets up a pristine database to use for testing.
DO NOT RUN ON PROD
"""

def test_server_init():
    drop_all_tables()
Run Code Online (Sandbox Code Playgroud)

...当你nosetests从项目的根目录运行命令时,鼻子会运行它.我唯一的选择是重命名这个函数,还是有另一种方法我可以更改文件,以便鼻子忽略它?

python testing nose

2
推荐指数
1
解决办法
858
查看次数

使用bash脚本设置PYTHONPATH并运行nosetests

我有以下脚本设置干净PYTHONPATH:

#!/bin/bash

# Get the directory the script is in
DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)

$ Walk up to root of branch dir
DIR=$DIR/../../..

PYTHONPATH=$DIR/module1
PYTHONPATH=$PYTHONPATH:$DIR/module2
PYTHONPATH=$PYTHONPATH:$DIR/module3
PYTHONPATH=$PYTHONPATH:$DIR/module4
export PYTHONPATH
Run Code Online (Sandbox Code Playgroud)

该脚本应该与nosetest命令一起运行,以允许测试在需要时导入所有必需的模块而不会出现任何问题:

./path/to/script/PythonPath.sh && nosetests <tons of other arguments>

但是,当我运行上面的命令时,我得到一个ImportError模块,声明它不存在.我echo在脚本的末尾添加了一个语句来帮助调试,PYTHONPATH它完全是应该的.我也试过PYTHONPATH手动设置,似乎无法重现同样的问题.

python bash nose

2
推荐指数
1
解决办法
913
查看次数

在并行python中运行测试用例

我想获得一些帮助,以使用multiprocessing模块并行运行多个python测试用例。我创建了一个FooTest类,其中包含10个测试用例(testA,testB ...)。类之外有一个测试用例test_foo。

如何使用python多处理模块并行运行所有测试用例?谢谢您的帮助。

import unittest
import time

def setUp():
    print "module setup"

def test_foo():
    pass

class FooTest(unittest.TestCase):

    # preparing to test
    def setUp(self):
        """ Setting up for the test """
        print "FooTest:setUp_:begin"

    # ending the test
    def tearDown(self):
        """Cleaning up after the test"""
        print "FooTest:tearDown_:begin"

    # test routine A
    def testA(self):
        """Test routine A"""
        print "FooTest:testA"
        time.sleep(2)

    # test routine B
    def testB(self):
        """Test routine B"""
        print "FooTest:testB"

    # test routine C
    def testC(self):
        """Test routine C"""
        print "FooTest:testC"

    # …
Run Code Online (Sandbox Code Playgroud)

nose python-multiprocessing

2
推荐指数
1
解决办法
2028
查看次数

在Nose中从time.time()伪造时间戳

我正在构建一个设备对象来从python中连接设备轮询数据,我正在尝试使用nose测试对象及其所有功能的交互操作.我在编写时间戳时遇到问题,time.time()因为每次调用函数时结果值都不同,这严重搞砸了一些测试,例如这个数据收集函数:

def getData(self, data):
    if type(data) is not type({}):
        #print "Bad Type!"
        raise TypeError
    else:
        #print "Good Type!"
        self.outD = {}
        datastr = ""
        for key, value in data.iteritems():
            self.outD[key] = value
        self.outD["timestamp"] = time.time()
        self.outD["id"] = self.id
        self._writeCSV()
Run Code Online (Sandbox Code Playgroud)

当我测试此函数的输出并比较生成的CSV文件时,它总是因时间戳而失败.我可以通过添加测试标志在我的设备对象中将其分出来,但我想知道是否有一个内置的方法来处理这样的问题,其中函数的结果可以用给定的值替换或本地函数伪造的time.time()通话.这可能吗?

python unit-testing timestamp nose

2
推荐指数
2
解决办法
3936
查看次数