-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathpsm.security.unittest.html
89 lines (89 loc) · 4.36 KB
/
psm.security.unittest.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>4.5. 添加认证后的单元测试</title>
<link rel="stylesheet" href="/stylesheets/master.css" type="text/css">
<link rel="stylesheet" href="/stylesheets/syntax.css" type="text/css">
<link rel="stylesheet" href="/docbook/includes/css/docbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.72.0">
<link rel="start" href="index.html" title="敏捷 Web 开发实践">
<link rel="up" href="psm.security.html" title="4. pySvnManager 本身的认证和授权">
<link rel="prev" href="psm.security.authz.html" title="4.4. pySvnManager 授权">
<link rel="next" href="psm.pylons.config.html" title="5. 配置文件">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<script language="javascript" type="text/javascript" src="/docbook/includes/js/header.js"></script><script language="javascript"> write_header("/docbook"); </script><div class="navheader">
<table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">4.5. 添加认证后的单元测试</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="psm.security.authz.html"><img src="/docbook/includes/images/docbook/prev.png" alt="上一页"></a> </td>
<th width="60%" align="center">4. pySvnManager 本身的认证和授权</th>
<td width="20%" align="right"> <a accesskey="n" href="psm.pylons.config.html"><img src="/docbook/includes/images/docbook/next.png" alt="下一页"></a>
</td>
</tr>
</table>
<hr>
</div>
<div class="sect2" lang="zh-cn">
<div class="titlepage"><div><div><h3 class="title">
<a name="psm.security.unittest"></a>4.5. 添加认证后的单元测试</h3></div></div></div>
<p>添加授权后,执行nosetests,会发现控制器的单元测试报错。
因为没有经过授权所有页面的输出都是“尚未授权”。实际上,
只要在每一个测试用例运行之前,访问 security控制器的login方法,
以实现登录,设置正确的session,则后续访问会自动带上cookie,
得到正确的授权页面。</p>
<p>在控制器的测试用例基类TestController中加上login方法,以简化登录调用:</p>
<pre class="programlisting">
class TestController(TestCase):
...
def login(self, username, password=""):
res = self.app.get(url_for(controller='security'))
form = res.forms[0]
form['username'] = username
if not password:
d = eval(config.get('test_users', {}))
password = d.get(username,'')
form['password'] = password
form.submit()
</pre>
<p>在测试用例中调用login方法:</p>
<pre class="programlisting">
self.login('root')
res = self.app.get(url_for(controller='check'))
assert res.status == 200
assert '''<input type="submit" name="submit" value='Check Permissions'>''' in res.body
assert res.c.reposlist == ['/', u'repos1', u'repos2', u'repos3', u'document']
</pre>
</div>
<table class="copyright" border="0" cellpadding="0" cellspacing="0" width="100%">
<col width="33%">
<col width="33%">
<col width="33%">
<tr>
<td></td>
<td align="center" valign="center"></td>
<td align="right" valign="center"><p class="copyright">
Copyright © 2006 <a href="http://www.worldhello.net/doc/"><b>WorldHello 开放文档之源</b> 计划</a></p></td>
</tr>
</table>
<div class="navfooter">
<hr>
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
<a accesskey="p" href="psm.security.authz.html"><img src="/docbook/includes/images/docbook/prev.png" alt="上一页"></a> </td>
<td width="20%" align="center"><a accesskey="u" href="psm.security.html"><img src="/docbook/includes/images/docbook/up.png" alt="上一级"></a></td>
<td width="40%" align="right"> <a accesskey="n" href="psm.pylons.config.html"><img src="/docbook/includes/images/docbook/next.png" alt="下一页"></a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">4.4. pySvnManager 授权 </td>
<td width="20%" align="center"><a accesskey="h" href="index.html"><img src="/docbook/includes/images/docbook/home.png" alt="首页"></a></td>
<td width="40%" align="right" valign="top"> 5. 配置文件</td>
</tr>
</table>
</div>
<script language="javascript" type="text/javascript" src="/docbook/includes/js/footer.js"></script><script language="javascript"> write_footer("/docbook"); </script>
</body>
</html>