修改README.md
This commit is contained in:
parent
572fcb39c3
commit
4c82dff96b
|
@ -2,14 +2,10 @@
|
|||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="09a4aeb4-cd0a-454b-9878-fc6edee9400a" name="Default" comment="">
|
||||
<change afterPath="$PROJECT_DIR$/common/pageObject.py" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/page/searchPage.py" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/testcase/test_baiduSearch.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/common/sendEmail.py" beforeDir="false" afterPath="$PROJECT_DIR$/common/sendEmail.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/page/LoginPage.py" beforeDir="false" afterPath="$PROJECT_DIR$/common/url.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/run.py" beforeDir="false" afterPath="$PROJECT_DIR$/run.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/testcase/test_baidu.py" beforeDir="false" />
|
||||
</list>
|
||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
||||
<option name="TRACKING_ENABLED" value="true" />
|
||||
|
@ -38,8 +34,8 @@
|
|||
<file leaf-file-name="run.py" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/run.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-95">
|
||||
<caret line="7" column="25" lean-forward="true" selection-start-line="7" selection-start-column="25" selection-end-line="7" selection-end-column="25" />
|
||||
<state relative-caret-position="393">
|
||||
<caret line="31" lean-forward="true" selection-start-line="31" selection-end-line="31" />
|
||||
<folding>
|
||||
<element signature="e#0#15#0" expanded="true" />
|
||||
</folding>
|
||||
|
@ -47,11 +43,35 @@
|
|||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="sendEmail.py" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/common/sendEmail.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-133">
|
||||
<caret line="8" column="9" selection-start-line="8" selection-start-column="9" selection-end-line="8" selection-end-column="9" />
|
||||
<folding>
|
||||
<element signature="e#48#57#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="README.md" pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/README.md">
|
||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
||||
<state split_layout="SPLIT">
|
||||
<first_editor relative-caret-position="-165">
|
||||
<caret line="30" column="1" selection-start-line="30" selection-start-column="1" selection-end-line="30" selection-end-column="1" />
|
||||
</first_editor>
|
||||
<second_editor />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="searchPage.py" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/page/searchPage.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="380">
|
||||
<caret line="20" lean-forward="true" selection-start-line="20" selection-end-line="20" />
|
||||
<state relative-caret-position="221">
|
||||
<caret line="20" column="51" selection-start-line="20" selection-start-column="51" selection-end-line="20" selection-end-column="51" />
|
||||
<folding>
|
||||
<element signature="e#0#53#0" expanded="true" />
|
||||
</folding>
|
||||
|
@ -62,8 +82,8 @@
|
|||
<file leaf-file-name="test_baiduSearch.py" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/testcase/test_baiduSearch.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-173">
|
||||
<caret line="34" column="27" selection-start-line="34" selection-start-column="27" selection-end-line="34" selection-end-column="27" />
|
||||
<state relative-caret-position="-671">
|
||||
<caret line="28" column="65" lean-forward="true" selection-start-line="28" selection-start-column="65" selection-end-line="28" selection-end-column="65" />
|
||||
<folding>
|
||||
<element signature="e#15#56#0" expanded="true" />
|
||||
</folding>
|
||||
|
@ -71,11 +91,6 @@
|
|||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="2019-02-26 10_45_51report.html" pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/report/2019-02-26 10_45_51report.html">
|
||||
<provider selected="true" editor-type-id="text-editor" />
|
||||
</entry>
|
||||
</file>
|
||||
</leaf>
|
||||
</component>
|
||||
<component name="FileTemplateManagerImpl">
|
||||
|
@ -135,13 +150,14 @@
|
|||
<option value="$PROJECT_DIR$/imagetobase64.py" />
|
||||
<option value="$PROJECT_DIR$/testcase/test.py" />
|
||||
<option value="$PROJECT_DIR$/page/LoginPage.py" />
|
||||
<option value="$PROJECT_DIR$/README.md" />
|
||||
<option value="$PROJECT_DIR$/common/pageObject.py" />
|
||||
<option value="$PROJECT_DIR$/page/searchPage.py" />
|
||||
<option value="$PROJECT_DIR$/testcase/test_baidu.py" />
|
||||
<option value="$PROJECT_DIR$/common/sendEmail.py" />
|
||||
<option value="$PROJECT_DIR$/common/url.py" />
|
||||
<option value="$PROJECT_DIR$/page/searchPage.py" />
|
||||
<option value="$PROJECT_DIR$/testcase/test_baiduSearch.py" />
|
||||
<option value="$PROJECT_DIR$/run.py" />
|
||||
<option value="$PROJECT_DIR$/common/sendEmail.py" />
|
||||
<option value="$PROJECT_DIR$/README.md" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
|
@ -171,26 +187,6 @@
|
|||
<item name="Automated-Test" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="Automated-Test" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="Automated-Test" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="Automated-Test" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="common" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="Automated-Test" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="Automated-Test" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="page" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="Automated-Test" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="Automated-Test" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="report" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="Automated-Test" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="Automated-Test" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="testcase" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="Automated-Test" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="External Libraries" type="cb654da1:ExternalLibrariesNode" />
|
||||
|
@ -411,8 +407,8 @@
|
|||
<window_info anchor="bottom" id="Database Changes" order="9" show_stripe_button="false" />
|
||||
<window_info anchor="bottom" id="Version Control" order="8" />
|
||||
<window_info anchor="bottom" id="Python Console" order="10" />
|
||||
<window_info anchor="bottom" id="Run" order="2" visible="true" weight="0.3292683" />
|
||||
<window_info anchor="bottom" id="Terminal" order="11" weight="0.32752612" />
|
||||
<window_info anchor="bottom" id="Run" order="2" weight="0.3292683" />
|
||||
<window_info anchor="bottom" id="Terminal" order="11" visible="true" weight="0.32752612" />
|
||||
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.261924" />
|
||||
<window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" />
|
||||
<window_info anchor="right" id="Database" order="3" />
|
||||
|
@ -441,9 +437,6 @@
|
|||
</breakpoint-manager>
|
||||
</component>
|
||||
<component name="editorHistoryManager">
|
||||
<entry file="file://$PROJECT_DIR$/common/__init__.py">
|
||||
<provider selected="true" editor-type-id="text-editor" />
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/__init__.py">
|
||||
<provider selected="true" editor-type-id="text-editor" />
|
||||
</entry>
|
||||
|
@ -495,16 +488,6 @@
|
|||
<provider selected="true" editor-type-id="text-editor" />
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/report/2019-02-19-14-47-46result.html" />
|
||||
<entry file="file://$PROJECT_DIR$/README.md">
|
||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
||||
<state split_layout="SPLIT">
|
||||
<first_editor relative-caret-position="-22">
|
||||
<caret line="40" column="96" selection-start-line="40" selection-start-column="96" selection-end-line="40" selection-end-column="96" />
|
||||
</first_editor>
|
||||
<second_editor />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/page/LoginPage.py">
|
||||
<provider selected="true" editor-type-id="text-editor" />
|
||||
</entry>
|
||||
|
@ -532,16 +515,6 @@
|
|||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/common/sendEmail.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="506">
|
||||
<caret line="48" selection-start-line="48" selection-end-line="48" />
|
||||
<folding>
|
||||
<element signature="e#47#56#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/HTMLTestRunner.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="5700">
|
||||
|
@ -552,38 +525,61 @@
|
|||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/run.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-95">
|
||||
<caret line="7" column="25" lean-forward="true" selection-start-line="7" selection-start-column="25" selection-end-line="7" selection-end-column="25" />
|
||||
<folding>
|
||||
<element signature="e#0#15#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
<entry file="file://$PROJECT_DIR$/report/2019-02-26 10_45_51report.html">
|
||||
<provider selected="true" editor-type-id="text-editor" />
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/page/searchPage.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="380">
|
||||
<caret line="20" lean-forward="true" selection-start-line="20" selection-end-line="20" />
|
||||
<folding>
|
||||
<element signature="e#0#53#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
<entry file="file://$PROJECT_DIR$/report/2019-02-26 10_49_31report.html">
|
||||
<provider selected="true" editor-type-id="text-editor" />
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/testcase/test_baiduSearch.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-173">
|
||||
<caret line="34" column="27" selection-start-line="34" selection-start-column="27" selection-end-line="34" selection-end-column="27" />
|
||||
<state relative-caret-position="-671">
|
||||
<caret line="28" column="65" lean-forward="true" selection-start-line="28" selection-start-column="65" selection-end-line="28" selection-end-column="65" />
|
||||
<folding>
|
||||
<element signature="e#15#56#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/report/2019-02-26 10_45_51report.html">
|
||||
<provider selected="true" editor-type-id="text-editor" />
|
||||
<entry file="file://$PROJECT_DIR$/page/searchPage.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="221">
|
||||
<caret line="20" column="51" selection-start-line="20" selection-start-column="51" selection-end-line="20" selection-end-column="51" />
|
||||
<folding>
|
||||
<element signature="e#0#53#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/run.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="393">
|
||||
<caret line="31" lean-forward="true" selection-start-line="31" selection-end-line="31" />
|
||||
<folding>
|
||||
<element signature="e#0#15#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/common/sendEmail.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-133">
|
||||
<caret line="8" column="9" selection-start-line="8" selection-start-column="9" selection-end-line="8" selection-end-column="9" />
|
||||
<folding>
|
||||
<element signature="e#48#57#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/README.md">
|
||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
||||
<state split_layout="SPLIT">
|
||||
<first_editor relative-caret-position="-165">
|
||||
<caret line="30" column="1" selection-start-line="30" selection-start-column="1" selection-end-line="30" selection-end-column="1" />
|
||||
</first_editor>
|
||||
<second_editor />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</component>
|
||||
</project>
|
34
README.md
34
README.md
|
@ -1,8 +1,8 @@
|
|||
# Automated-Test
|
||||
页面自动化测试框架
|
||||
## Web自动化测试框架
|
||||
|
||||
测试框架:
|
||||
python3+Selenium+unittest自动化UI测试框架
|
||||
### 测试框架:
|
||||
python3+Selenium+unittest+HTMLTestRunner+pageObject Web自动化测试框架
|
||||
|
||||
(selenium+unittest搭建的WebUI自动化测试框架)
|
||||
|
||||
|
@ -12,35 +12,41 @@ python3+Selenium+unittest自动化UI测试框架
|
|||
测试代码托管平台:GitHub
|
||||
通过主从服务器执行测试
|
||||
|
||||
测试代码结构:
|
||||
### 测试代码结构:
|
||||
|
||||
![](https://raw.githubusercontent.com/linyuli861/Automated-Test/master/z-README-image/structure.png)
|
||||
|
||||
> common文件夹存放公有元素,如url,测试报告发送邮件地址,使用信息等;
|
||||
* common文件夹存放公有元素,如url,测试报告发送邮件地址,使用信息等;
|
||||
|
||||
> file文件夹存放测试过程中需要使用的文件,如图片,txt,zip文件等
|
||||
* file文件夹存放测试过程中需要使用的文件,如图片,txt,zip文件等
|
||||
|
||||
> page文件夹用于存放测试过程中需要使用的页面元素
|
||||
* page文件夹用于存放测试过程中需要使用的页面元素
|
||||
|
||||
> report文件夹用于存放测试生成的测试报告
|
||||
* report文件夹用于存放测试生成的测试报告
|
||||
|
||||
> testcase文件夹中存放测试用例
|
||||
* testcase文件夹中存放测试用例
|
||||
|
||||
> HTMLTestRunner.py是将测试结果生成为html版的测试报告的文件
|
||||
* HTMLTestRunner.py是将测试结果生成为html版的测试报告的文件
|
||||
|
||||
> run.py 执行run.py文件可以执行全部测试用例
|
||||
* run.py 执行run.py文件可以执行全部测试用例
|
||||
|
||||
生成的测试报告例子如下所示
|
||||
###生成的测试报告例子如下所示
|
||||
|
||||
![](https://raw.githubusercontent.com/linyuli861/Automated-Test/master/z-README-image/report.png)
|
||||
|
||||
###发送邮件如下所示:
|
||||
调用common中的sendEmail,向指定邮箱发送最新的测试报告文件
|
||||
|
||||
发送邮件如下所示:
|
||||
|
||||
![](https://raw.githubusercontent.com/linyuli861/Automated-Test/master/z-README-image/email.jpg)
|
||||
|
||||
|
||||
###PageObject设计模式
|
||||
由于Web页面自动化测试的过程中会存在许多重复的元素,且很多Web页面测试的元素值不稳定,经常变更,
|
||||
为了使得Web页面自动化测试的代码更具有健壮性,因此使用PageObject设计模式,
|
||||
将web自动化测试的测试用例和测试用例中需要使用到的元素解耦。
|
||||
|
||||
*解耦后的代码方便修改,增强了自动化测试代码的复用性。*
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,13 @@
|
|||
# email:3381350680@qq.com password:abc123456
|
||||
"""
|
||||
使用一个邮箱向另一个邮箱发送测试报告的html文件,这里需要对发送邮件的邮箱进行设置,获取邮箱授权码。
|
||||
username=“发送邮件的邮箱”, password=“邮箱授权码”
|
||||
这里要特别注意password不是邮箱密码而是邮箱授权码。
|
||||
|
||||
mail_server = "发送邮箱的服务器地址"
|
||||
这里常用的有 qq邮箱——"stmp.qq.com", 163邮箱——"stmp.163.com"
|
||||
其他邮箱可自行百度
|
||||
"""
|
||||
import os
|
||||
import smtplib
|
||||
from email.mime.text import MIMEText
|
||||
|
|
17
run.py
17
run.py
|
@ -19,12 +19,13 @@ if __name__ == '__main__':
|
|||
now = time.strftime("%Y-%m-%d %H_%M_%S") # 报告生成时间
|
||||
test_reports_address = '../report' # 测试报告存放位置
|
||||
filename = '../report/' + now + 'report.html' # 设置报告文件名
|
||||
f = open(filename, 'wb')
|
||||
runner = HTMLTestRunner.HTMLTestRunner(stream=f, title=u'Web自动化测试', description=u'详细测试结果如下:')
|
||||
fp = open(filename, 'wb')
|
||||
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'Web自动化测试', description=u'详细测试结果如下:')
|
||||
runner.run(cases)
|
||||
f.close()
|
||||
# time.sleep(6)
|
||||
# # 查找最新生成的测试报告地址
|
||||
# new_report_addr = SendEmail().acquire_report_address(test_reports_address)
|
||||
# # 自动发送邮件
|
||||
# SendEmail().send_email(new_report_addr)
|
||||
fp.close()
|
||||
# 向指定邮箱发送测试报告的html文件
|
||||
time.sleep(6)
|
||||
# 查找最新生成的测试报告地址
|
||||
new_report_addr = SendEmail().acquire_report_address(test_reports_address)
|
||||
# 自动发送邮件
|
||||
SendEmail().send_email(new_report_addr)
|
||||
|
|
Loading…
Reference in New Issue