有没有办法在 PyTest 夹具中定义标记?
当我在 pytest.txt 中指定时,我试图禁用慢速测试-m "not slow"。
我已经能够禁用单个测试,但不能禁用用于多个测试的固定装置。
我的夹具代码如下所示:
@pytest.fixture()
@pytest.mark.slow
def postgres():
# get a postgres connection (or something else that uses a slow resource)
yield conn
Run Code Online (Sandbox Code Playgroud)
一些测试具有以下一般形式:
def test_run_my_query(postgres):
# Use my postgres connection to insert test data, then run a test
assert ...
Run Code Online (Sandbox Code Playgroud)
我在https://docs.pytest.org/en/latest/mark.html(更新的链接)中找到了以下评论:
“标记只能用于测试,对灯具没有影响。” 这个评论的原因是固定装置本质上是函数调用并且标记只能在编译时指定?
有没有一种方法可以指定使用特定固定装置(在本例中为 postgres)的所有测试都可以标记为慢,而无需@pytest.mark.slow在每个测试上指定?
我正在使用Mercurial 1.6.我有一个带有一些subrepos(11)的回购.我想将父回购推送到默认的远程仓库而不推送子回购.想要这样做的原因包括:
但是,我一直无法找到实现这一目标的方法.我尝试删除.hgsub和.hgsubstate的内容(没有提交),但仍然坚持推动subrepos.
如何将更改从本地存储库推送到远程存储库并暂时忽略子存取?
今天我看到PySNMP安装了pycryptodomex.这个x名字看起来很可疑而且令人惊讶.
我试图追踪它,但看起来pycryptodome和pycryptodomex都归同一个帐户所有并指向同一个Github存储库.
特别是因为加密库是核心安全功能,我怀疑是重复.
这种重复的目的是什么?我可以从公开来源发现这些信息吗?
我想配置我的Eclipse环境以使用JDK而不是标准JRE.我这样做是因为我使用m2eclipse,这需要JDK中的tools.jar来运行.
我正在使用JDK 1.6.0_16在Windows 7 32位上运行Eclipse 3.5.1.
在我的系统上,我将JDK安装到"C:\ Program Files\Java\jdk"(最新安装的符号链接).
我将-vm选项添加到eclipse.ini以指向JDK
-vm
C:/Program Files/Java/jdk/bin
Run Code Online (Sandbox Code Playgroud)
我已经确认eclipse实际上是从所需的JVM开始的.在配置细节中
eclipse.vm=c:/Program Files/Java/jdk/bin\..\jre\bin\client\jvm.dll
Run Code Online (Sandbox Code Playgroud)
另外,在我的环境中,
JAVA_HOME=c:\Program Files\Java\jdk
Run Code Online (Sandbox Code Playgroud)
但是,在Window |中 偏好| Java | 安装的JRE,列出的唯一JRE是"C:\ Program Files\Java\jre6"中的JRE.这个JRE最终成为运行Maven的那个,所以我的maven构建失败了.
我知道我可以手动将Installed JRE更改为指向JDK,这就是我过去所做的.但是,我想找到一种方法来编写此更改的脚本,以便我可以自动安装开发环境.
这个设置存储在哪里?自动配置Eclipse以将JDK用作唯一安装的JRE的最佳方法是什么?
我想以编程方式确定当前用户(或进程)是否有权创建符号链接.在Windows(Vista和更高版本)中,如果没有SeCreateSymbolicLinkPrivilege,则无法创建符号链接,默认情况下,此操作仅分配给管理员.如果尝试创建没有此权限的符号链接,则会发生Windows错误1314(客户端未保留所需的权限).
为了演示此限制,我创建了一个Windows的全新安装,以初始管理员帐户登录(通过UAC限制),并且无法在主目录中创建符号链接.

以管理员身份运行命令提示符或禁用UAC后,该命令将无错执行.
根据这篇文章,"代表用户执行的每个进程都有[access]令牌的副本".
所以我创建了一个Python脚本来查询权限.为了方便和后人,我在下面列出了一段摘录.
该脚本背后的想法是枚举所有特权并确定该进程是否具有所需的特权.不幸的是,我发现当前进程实际上并没有所需的权限,即使它可以创建符号链接.
我怀疑问题在于即使当前用户的权限没有明确包含该权限,他的组成员资格确实提供了该权限.
简而言之,我如何确定给定进程是否有权创建符号链接(而不尝试创建符号链接)?最好使用C或C++或Python中的示例,但使用Windows API的任何内容都是合适的.
def get_process_token():
token = wintypes.HANDLE()
TOKEN_ALL_ACCESS = 0xf01ff
res = OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, token)
if not res > 0: raise RuntimeError("Couldn't get process token")
return token
def get_privilege_information():
# first call with zero length to determine what size buffer we need
return_length = wintypes.DWORD()
params = [
get_process_token(),
TOKEN_INFORMATION_CLASS.TokenPrivileges,
None,
0,
return_length,
]
res = GetTokenInformation(*params)
# assume we now have the necessary length in return_length
buffer = …Run Code Online (Sandbox Code Playgroud) 我有一个带有属性和 getter 方法的类:
public Class MyClass
{
private String myValue = "foo";
public String getMyValue();
}
Run Code Online (Sandbox Code Playgroud)
我希望能够在格式化字符串中使用 foo 的值,如下所示:
String someString = "Your value is {myValue}."
String result = Formatter.format(someString, new MyClass());
// result is now "Your value is foo."
Run Code Online (Sandbox Code Playgroud)
也就是说,我想要一些像.format上面这样的函数,它采用指定某个对象属性的格式字符串以及具有这些属性的实例,并相应地格式化字符串。
用Java可以实现这个壮举吗?
关于设置Mongo索引的最佳实践问题.Mongoengine是Python ORM包装器,允许您在Document元类中设置索引.
这个元类何时被内省并添加了索引?我可以通过mongoengine Document类构建一个集合,然后在事后添加一个索引吗?
如果我从元类中删除索引,是否会从相应的集合中自动删除索引?
谢谢,
我刚刚从https://github.com/RickP/mongopi安装了 mongopi,主要做了一些调整后它可以正常工作$ sudo chown $USER /data/db。然而,我的 mongo 和 mongod 调用不是持久的PATH=$PATH:/opt/mongo/bin/,
export PATH但我不会在下一个 ssh 会话中持续。另外如何在启动时使 mongo 初始化?我完成了 github repo 中的所有步骤。
这个问题本质上与这个问题相同,除了Python。
我希望查询 PostgreSQL 数据库中按电子邮件地址列排序的行,然后在 Python 中执行依赖于该排序的操作。
我正在查询的数据库正在使用en_US.UTF8排序规则,经过一些测试,我发现该排序规则对于@电子邮件地址中的符号有一些特殊的行为:
mydb=> SELECT '0' < '@';
?column?
----------
f
(1 row)
mydb=> SELECT '0' < '@0';
?column?
----------
t
(1 row)
Run Code Online (Sandbox Code Playgroud)
这个答案表明@某些排序规则可能会忽略某个符号,但如果是这种情况,我预计t第二个查询会出现 a 。
尽管Python提供了一个语言环境模块,但该模块在某些平台上的行为不一致,因此我似乎无法使用该模块来实现此目的。
根据该报告,我尝试了使用PyICU 包的建议,这似乎很有希望:
>>> import icu
>>> collator = icu.Collator.createInstance()
>>> collator.getLocale()
<Locale: en_US>
>>> collator.getSortKey('0') < collator.getSortKey('@')
False
>>> collator.getSortKey('0') < collator.getSortKey('@0')
False
Run Code Online (Sandbox Code Playgroud)
但正如您所看到的,在最后的比较中,它产生的顺序与 postgres 不同。
我尝试为查询指定不同的排序规则,例如:
SELECT email COLLATE posix FROM mytable …Run Code Online (Sandbox Code Playgroud) 我目前有一个类似于这些的项目和测试.
class mylib:
@classmethod
def get_a(cls):
return 'a'
@classmethod
def convert_a_to_b(cls, a):
return 'b'
@classmethod
def works_with(cls, a, b):
return True
class TestMyStuff(object):
def test_first(self):
self.a = mylib.get_a()
def test_conversion(self):
self.b = mylib.convert_a_to_b(self.a)
def test_a_works_with_b(self):
assert mylib.works_with(self.a, self.b)
Run Code Online (Sandbox Code Playgroud)
使用py.test 0.9.2,这些测试(或类似测试)通过.对于更高版本的py.test,test_conversion和test_a_works_with_b失败并且'TestMyStuff没有属性a'.
我猜这是因为在py.test的后续版本中,为每个被测试的方法创建了一个单独的TestMyStuff实例.
编写这些测试的正确方法是什么,以便可以为序列中的每个步骤提供结果,但是可以(必须)使用先前(成功)测试的状态来执行后续测试?
我从网络路径调用我的一个脚本.脚本基本上只调用另一个程序并将当前目录作为参数传递给它.
当我传递$ PWD作为参数时,我的程序看到的路径是"Microsoft.PowerShell.Core\FileSystem ::\my_server\public",它当然会失败,因为它需要标准的UNC路径.
我的临时解决方案是简单地做,.Replace("Microsoft.PowerShell.Core\FileSystem::", "")并且它有效,但我想知道将路径从这种"powershell"格式转换为标准UNC的真正方法是什么.
有更好的解决方案吗?
我最近惊讶地发现这个代码可以在Python 2.7上运行,但在Python 3上会失败.
import datetime
class MyTime(datetime.datetime):
def __new__(cls, year):
ob = datetime.datetime.__new__(cls, year, 1, 1)
return ob
class MySpecialTime(MyTime):
def __init__(self, *args, **kwargs):
super(MySpecialTime, self).__init__(*args, **kwargs)
MyTime(2013)
MySpecialTime(2013)
Run Code Online (Sandbox Code Playgroud)
在Python 3.3上,最后一行崩溃时出现此错误:
Traceback (most recent call last):
File "file.py", line 13, in <module>
MySpecialTime(2013)
File "file.py", line 10, in __init__
super(MySpecialTime, self).__init__(*args, **kwargs)
TypeError: object.__init__() takes no parameters
Run Code Online (Sandbox Code Playgroud)
Python 2和3之间有什么不同导致此代码仅在3上失败?提示 - 向__init__MyTime 添加和方法可以解决问题.我对纠正错误或编写更好的代码不感兴趣(我已经完成了这两个代码).相反,我想了解为什么会发生这种情况,特别是为什么Python 3.3的行为不同.
我经常发现自己处于这种情况:
在最后一步中,我使用git checkout -b new-branch-name,但是在调用该命令后,当前磁头不再引用已拉出的更改。它只有一个父母。它不再是合并。
在执行合并时,如何将合并提交到新分支?
python ×4
mongodb ×2
pytest ×2
collation ×1
eclipse ×1
fork ×1
git ×1
indexing ×1
java ×1
mercurial ×1
merge ×1
mongoengine ×1
permissions ×1
postgresql ×1
powershell ×1
privileges ×1
pycryptodome ×1
python-3.x ×1
raspberry-pi ×1
subrepos ×1
testing ×1
winapi ×1
windows ×1