pytest Demo
conftest.py
# -*- coding: utf-8 -*- import threading import subprocess import time import pytest def run_with_timeout(timeout = None): def _decorator(f): def _wrapper(*args, **kwargs): def _f(*args, **kwargs): try: _result = f(*args, **kwargs) except Exception , e: thread._exception = e else: thread.result = _result thread = threading.Thread(target = _f, args = args, kwargs = kwargs) thread.daemon = True thread._exception = None thread.start() thread.join(timeout = timeout) if thread.isAlive(): raise RuntimeError('function *%s* exceeded configured time out of %ss' %(f.__name__, timeout)) assert False if thread._exception is None: return thread.result else: raise thread._exception _wrapper.__name__ = f.__name__ return _wrapper return _decorator def pytest_report_header(config): return ["测试!"] #def pytest_runtest_setup(item): # #增加初始化处理部分 # print "Begin to to some test setup operations ..." # p = subprocess.Popen("su postgre", stdin= subprocess.PIPE, stdout = subprocess.PIPE, shell = True) # (out, err) = p.communicate("/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/data/logfile start") # print out # print err #def pytest_runtest_teardown(item): # print "runtest teardown invoked" #xUnit style tesing def pytest_runtest_call(item): if hasattr(item.obj, 'timeout'): timeout =item.obj.timeout.args[0] item.obj = run_with_timeout(timeout)(item.obj)
pytestdemo.py
# -*- coding: utf-8 -*- #!/usr/bin/python import psycopg2 import os, sys import subprocess import pytest DBSERVERHOST = "10.0.11.226" DBPORT = 5432 DBNAME = "source" DBUSER = "postgre" DBPASSWORD = "postgre" def setup_module(module): print "\nsetup_module invoked, so i will do some prepare ..." #增加初始化处理部分 p = subprocess.Popen("su postgre", stdin= subprocess.PIPE, stdout = subprocess.PIPE, shell = True) (out, err) = p.communicate("/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/data/logfile start") print out print err def teardown_module(module): print "\nteardown_module invoked, do some clear up..." def setup_function(function): print "\nsetup_function invoked" def teardown_function(function): print "\nteardown_function invoked" def test_function1(): """Just a demo""" #清理表 conn = psycopg2.connect(host = DBSERVERHOST, port = DBPORT, database = DBNAME, \ user = DBUSER, password = DBPASSWORD) cur = conn.cursor() cur.execute("truncate table t_pri_sample;") cur.execute("truncate table t_pri_package;") cur.execute("truncate table t_que_bigpack;") cur.execute("truncate table t_src_file_sam;") cur.execute("truncate table t_src_archive_sam;") conn.commit() cur.close() conn.close() #清理队列 p = subprocess.Popen("curl 'http://10.2.1.50:1218/?name=QPREP_S&opt=reset'", \ stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = True) #print p.stdout.read() assert "HTTPSQS_RESET_OK" in p.stdout.read() #清理TC消重库 p = subprocess.Popen("/home/t02/prep/Sam/Deal/bin/sh reTC.sh", \ stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = True) #准备测试样本包 p = subprocess.Popen("cp -r /home/test/testSamples/sample1 /home/t02/prep/In_Pri/in" ,\ shell = True) #启动来源入库进程 p = subprocess.Popen("/home/t02/prep/In_Pri/bin/go.sh", shell = True) #检查文件是否已切至bak目录 pass @pytest.mark.timeout(5) def test_timeout(): """This test *should* fail when process timeout = 1""" from time import sleep sleep(10) def test_fail(): assert False
运行如下命令进行测试
py.test pytesedemo.py
如果要多pytest做一些config,可以增加pytest.ini:
[pytest]
addopts = -v -s -rfsxX