Giter Club home page Giter Club logo

sosotest's Introduction

sosotest自动化测试平台介绍

sosotest自动化测试平台的功能:
1、http接口、dubbo接口的测试。(其他类型类型接口测试可通过二次开发支持)
2、支持多环境、多服务配置。
3、支持数据业务分离。
4、支持数据驱动。
5、支持mock。
6、支持CI。
7、支持自定义封装。
8、支持mysql数据库操作、redis操作、mongo操作、kafka等。
9、分布式任务处理,可并发支持多任务。
sosotest是一个简单易用且功能强大的自动化测试平台。
目前sosotest已经为贝壳找房提供了稳定的后端接口自动化服务,服务于贝壳找房的各个重要业务线, 为业务线后端自动化赋能,有效提高了后端接口自动化效率。

多服务、多环境、多模式支持

可以灵活的配置被测服务,配置测试环境和请求地址。
普通模式、关键字模式和python模式的多模式支持,适合不同能力的测试人员。
可自定义关键字、自定义python函数和类,实现更好的封装。

数据业务分离

全局变量、组合文本功能,实现了平台的数据与业务的分离。

数据驱动

python模式支持接口级的数据驱动。
任务优先变量,实现了任务级的数据驱动。

HTTP/DUBBO测试

支持HTTP接口测试。
支持DUBBO接口测试(telnet invoke方式)。

可结合CI工具完成CI

提供了invoke接口和CI示例,能够跟CI工具结合进行持续集成。

多功能HTTP MOCK服务

提供了mock服务,支持restful规范的接口,支持使用python自定义流程,动态返回mock响应结果。

多种用例导入模式(postman导入、日志导入)

http支持postman导入,日志导入。
dubbo支持日志导入。

多种录制方式(Chrome扩展、报文生成、MOCK代理)

http支持多种录制方式。
Chrome扩展,一键点击生成接口和业务流用例。
复制原始请求报文,一键生成接口用例。
设置app的mock代理,直接生成mock数据后,一键转为接口用例。

分布式异步执行任务,支持多任务高并发。

任务执行采用了master-slave的分布式方案,能够接入多个slave实现任务执行的高并发。

安装部署&使用文档

gitbook: sosotest_docs

联系我们

交流反馈QQ群:284333313
作者邮箱:[email protected]
                   [email protected]

鸣谢

sosotest测试平台是从2017年初开始做的一个项目,期间经历了各种改版,到贝壳找房后,又进行了更多的功能开发和完善, 尤其在贝壳找房期间开发的python模式,让平台功能更加完善,使得平台可以更好的服务于经验丰富的pythoner。 在此向感谢一下在sosotest的成长过程中给予支持的各位领导和一起付出努力和做出贡献的各位同事。

首先感谢sosotest起步时给予大力支持的技术总监金梁,是您的支持才有了sosotest的诞生。

然后感谢销售易的技术总监杨松给予的大力支持,是您的支持,才有了sosotest的第二次改版, 从一个简陋的平台,到功能逐步完善,是您的强力推进落地,才有了平台在公司落地为研发团队赋能, 并且获得了公司创新大赛的第一名,如果不是因为一些特殊原因,应该还会跟您一起战斗。

再然后是在贝壳的leader何立春,为sosotest在贝壳找房的落地和推进提供了很大的帮助, 在贝壳找房期间也大力支持sosotest的开发工作,使得sosotest在贝壳期间再一次产生了质的飞跃, 任务分布式执行让平台能够承担更大的执行压力, python模式支持让平台能更好的封装, 以及其他一些主要能力例如mock服务等都是在贝壳期间开发完成的, 在贝壳让sosotest真正的完善,成为一个可使用的功能完善的产品。

接下来重点要感谢的是一起开发平台的小伙伴李亚超,从sosotest的第一行代码开始,我们共同探讨平台功能设计,探讨实现方案, 哪怕我们已经不在一个公司了,依然一起对sosotest进行开发和维护,多少个周末我们一起合并代码, 都是为了sosotest的每一次成长,感谢李亚超这两年对sosotest的贡献。

最后还要感谢一下对平台做出其他贡献的朋友和同事,
感谢李成龙开发的sosotest的jenkins的插件,让jenkins能够更方便的调度sosotest的任务执行。
感谢岳令为sosotest提供的docker file,让sosotest的部署执行更加方便。 (由于一些特殊原因,未能合入本次开源)
感谢王蕾以及房源团队的小伙伴们一起对sosotest_docs进行完善。
感谢使用sosotest的各位同事在使用过程中的不断反馈,平台也是在大家的使用和反馈中不断完善的。

License

MIT

Copyright(c) 2017 Lianjia, Inc. All Rights Reserved

sosotest's People

Contributors

truelovesdu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sosotest's Issues

跟python3.7有兼容性问题

python3 manage.py migrate

BASE_DIR: /Users/ruishencai/work/code/github/sosotest/AutotestWebD
rootDir: /Users/ruishencai/work/code/github/sosotest
config.ini CONFDICT: {'COMMON': {'support_charset': 'UTF8,UTF-8,GBK,GB2312', 'file_max_show_len': '4000', 'allowed_host': '[""]', 'groupLevel1': '业务线', 'groupLevel2': '模块', 'loginType': 'SYSTEM', 'showMenuConfig': '{"HttpInterface":1,"DubboInterface":1,"StatisticTask":1}'}, 'LDAP': {'AUTH_LDAP_SERVER_URI': 'ldap://yourldapserver.com:389', 'AUTH_LDAP_BIND_DN': 'CN=ldapauth,OU=Sysusers,DC=ustaff,DC=com', 'AUTH_LDAP_BIND_PASSWORD': 'xxxxxxxxxxxxxx', 'AUTH_LDAP_USER_ATTR_MAP': '{"first_name": "cn","email": "mail"}', 'AUTH_LDAP_GROUP_SEARCH': 'LDAPSearch("OU=mailground,DC=ustaff,DC=com",ldap.SCOPE_SUBTREE, "(objectClass=group)" )', 'AUTH_LDAP_GROUP_TYPE': 'GroupOfNamesType(name_attr="CN")', 'AUTH_LDAP_USER_SEARCH': 'LDAPSearchUnion(\nLDAPSearch('ou=XXX,dc=xxxxx,dc=com', ldap.SCOPE_SUBTREE, "(&(objectClass=person)(sAMAccountName=%(user)s))"),\n)'}, 'SITE': {'site_name': 'sosotest', 'header': 'sosotest自动化测试平台管理系统', 'title': 'sosotest自动化测试平台管理系统', 'framework_version': 'sosotest-AutotestPlatform-v2.2'}, 'DIR': {'root': 'sosotest_opensource', 'framework': 'AutotestFramework', 'web': 'AutotestWebD', 'uiFramework': 'RobotUiTest', 'releaseRoot': 'D:/all_github/sosotest', 'useTag': 'TEST01'}, 'DB': {'host': '127.0.0.1', 'port': '3306', 'username': 'root', 'password': 'Root.1234', 'dbname': 'sosotest_data'}, 'TCP': {'host': '127.0.0.1', 'port': '9298', 'uiport': '8298', 'ftpport': '6299'}, 'WEB': {'uri': 'http://test.sosotest.com', 'debug': 'True'}, 'EMAIL': {'sender': '[email protected]', 'smtpserver': 'smtp.163.com', 'username': 'fateuser', 'password': 'fatepassword'}, 'REDIS': {'host': '127.0.0.1', 'port': '6379', 'password': ''}, 'DIRFILE': {'filepath': '/data0/release/sosotest_files', 'log': 'rootlog', 'uploads': 'uploads', 'reports': 'reports'}, 'DB-TEST01': {'host': '127.0.0.1', 'port': '3306', 'username': 'root', 'password': 'password', 'dbname': 'sosotest_data'}, 'TCP-TEST01': {'host': '127.0.0.1', 'port': '9298', 'uiport': '8298', 'ftpport': '6299'}, 'WEB-TEST01': {'uri': 'http://test.sosotest.com', 'debug': 'True'}, 'EMAIL-TEST01': {'sender': '[email protected]', 'smtpserver': 'smtp.163.com', 'username': 'fateuser', 'password': 'fatepassword'}, 'REDIS-TEST01': {'host': '127.0.0.1', 'port': '6379', 'password': ''}, 'DIRFILE-TEST01': {'filepath': '/Users/ruishencai/work/code/github/sosotest/soso_files', 'log': 'rootlog', 'uploads': 'uploads', 'reports': 'reports'}}
srcRootDir: /Users/ruishencai/work/code/github/src
releaseDir: D:/all_github/sosotest
ALLOWED_HOSTS: ['
']
GroupLevel1:业务线 GroupLevel2:模块
showMenuConfig:{'HttpInterface': 1, 'DubboInterface': 1, 'StatisticTask': 1}
TEST_ENV [TEST01]
TCP_HOST[127.0.0.1] TCP_PORT[9298] TCP_UIPORT[8298]
dbHost[127.0.0.1] dbPort[3306] dbUsername[root] dbPassword[password] dbName[sosotest_data]
logRoot:/Users/ruishencai/work/code/github/sosotest/soso_files/rootlog
uploadsRoot:/Users/ruishencai/work/code/github/sosotest/soso_files/uploads
reportsRoot:/Users/ruishencai/work/code/github/sosotest/soso_files/reports
CONF_KEYS:dbKey[DB-TEST01] tcpKey[TCP-TEST01] webKey[WEB-TEST01] emailKey[EMAIL-TEST01]
#############################################################################
###############################isRelase[False]###############################
#############################################################################
[DJANGOSETTINGINFOS]
Traceback (most recent call last):
File "manage.py", line 22, in
execute_from_command_line(sys.argv)
File "/Users/ruishencai/.virtualenvs/sosotest/lib/python3.7/site-packages/django/core/management/init.py", line 364, in execute_from_command_line
utility.execute()
File "/Users/ruishencai/.virtualenvs/sosotest/lib/python3.7/site-packages/django/core/management/init.py", line 338, in execute
django.setup()
File "/Users/ruishencai/.virtualenvs/sosotest/lib/python3.7/site-packages/django/init.py", line 27, in setup
apps.populate(settings.INSTALLED_APPS)
File "/Users/ruishencai/.virtualenvs/sosotest/lib/python3.7/site-packages/django/apps/registry.py", line 85, in populate
app_config = AppConfig.create(entry)
File "/Users/ruishencai/.virtualenvs/sosotest/lib/python3.7/site-packages/django/apps/config.py", line 94, in create
module = import_module(entry)
File "/Users/ruishencai/.virtualenvs/sosotest/lib/python3.7/importlib/init.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 1006, in _gcd_import
File "", line 983, in _find_and_load
File "", line 967, in _find_and_load_unlocked
File "", line 677, in _load_unlocked
File "", line 728, in exec_module
File "", line 219, in _call_with_frames_removed
File "/Users/ruishencai/.virtualenvs/sosotest/lib/python3.7/site-packages/django/contrib/admin/init.py", line 4, in
from django.contrib.admin.filters import (
File "/Users/ruishencai/.virtualenvs/sosotest/lib/python3.7/site-packages/django/contrib/admin/filters.py", line 10, in
from django.contrib.admin.options import IncorrectLookupParameters
File "/Users/ruishencai/.virtualenvs/sosotest/lib/python3.7/site-packages/django/contrib/admin/options.py", line 12, in
from django.contrib.admin import helpers, widgets
File "/Users/ruishencai/.virtualenvs/sosotest/lib/python3.7/site-packages/django/contrib/admin/widgets.py", line 151
'%s=%s' % (k, v) for k, v in params.items(),
^
SyntaxError: Generator expression must be parenthesized

找了一下,貌似是python3.7跟django有兼容问题

https://zhuanlan.zhihu.com/p/44276280

删除没有关联模块的业务线后无法新建/修改接口

复现步骤:
1.在后台设置业务线A关联模块a,并添加用例
2.在后台解除关联(A,a),并添加关联(B,a),保存退出
3.打开已有接口详情页面发现编辑后无法保存
原因排查:
浏览器console中出现如下报错:
image
提示bmDict[blId]为空,没有length这一属性
通过进一步排查发现:
bmDict中不含被删除的业务线信息,但blId仍然会取到被删除的业务线
image
修改建议:
1.业务线做成真删除

mac 系统报错 函数[ftpServer]异常 Address already in use

ERROR:root:★★★★★★★★★★平台异常,请联系管理员★★★★★★★★★★
[EXCEPTION]: 函数[ftpServer]异常:Traceback (most recent call last):
File "/Users/zp/myTools/sosotest/AutotestFramework/core/decorator/normal_functions.py", line 220, in catch_exception_wrapper
return func(*args, **kwargs)
File "/Users/zp/myTools/sosotest/AutotestFramework/core/decorator/normal_functions.py", line 200, in take_time_wapper
funcRet = func(*args, **kwargs)
File "/Users/zp/myTools/sosotest/AutotestFramework/runfunc/listenserver.py", line 488, in ftpServer
server = FTPServer(address, handler) # FTP服务器实例
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pyftpdlib/servers.py", line 114, in init
self.bind_af_unspecified(address_or_socket)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pyftpdlib/ioloop.py", line 1018, in bind_af_unspecified
raise socket.error(err)
OSError: [Errno 48] Address already in use
★★★★★★★★★★平台异常,请联系管理员★★★★★★★★★★

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.