0

Windowsファイルのインポート方法があり、ボタンを手動でクリックするとアプリケーションは正常に動作しますが、QTP(Quick Test Professional)などのツールを使用してアプリケーションを実行すると同じコードが失敗します

失敗した行を太字で強調しました。 [ remoteStream.Write(buffer, 0, bytesRead);]

    using (FileStream localStream = File.OpenRead(filePath))
            {

                RemoteFile remoteFile = this.serverComponent.GetUploadFileHandle(filePath);
                if (remoteFile == null)
                {
                    stopWatch.Stop();

                }

                using (RemoteFileStream remoteStream = new RemoteFileStream(remoteFile))
                {

                    long localFileSize = localStream.Length;
                    long readSoFar = 0;
                    int bytesRead = 0;
                    byte[] buffer = new byte[bufferSize];
                    while ((bytesRead = localStream.Read(buffer, 0, bufferSize)) > 0)
                    {

                        remoteStream.Write(buffer, 0, bytesRead);
                        readSoFar += bytesRead;

                        progressListener.UpdateFileProgress(firmwareID, readSoFar, localFileSize);
                    } 
                }

                uploadSuccess = this.server.UploadFileDone(remoteFile);
            }
            stopWatch.Stop();                
            progressListener.UpdateFileStatus(firmwareID, uploadSuccess ? FirmwareImportStatus.ImportSuccessful : FirmwareImportStatus.ImportFailed);
        }

インポートをトリガーする QTP コード。 SwfWindow("Swfname:=ImportFWImagesWF").SwfButton("Swfname:=btnNext","text:=Import").Click

Stream c# クラスをオーバーライドしています。そして、ソケット例外 「System.Net.Sockets.SocketException:既存の接続がリモートホストによって強制的に閉じられました」が発生しています

Stream c# クラスをオーバーライドしています。私のクラス名はRemoteFileStream です

サーバーコード

    public override void Write(byte[] buffer, int offset, int count)
    {
        #region Check Args
        if (buffer == null)
        {
            throw (new ArgumentNullException("The buffer is null"));
        }
        if (offset < 0 || count < 0)
        {
            throw (new ArgumentOutOfRangeException("The offset or count is negative."));
        }
        if (offset + count > buffer.Length)
        {
            throw (new ArgumentException("The sum of offset and count is larger than the buffer length."));
        }
        #endregion

        _rf.Write(buffer, offset, count);//Exception comes from here
    }

注: QTP ツールからアプリケーションにアクセスした場合にのみ、例外が発生します。アプリケーションを手動で実行しても問題はありません。許可の問題のためですか?私を助けてください。

4

1 に答える 1

0

QTP がステップを実行するとき、アプリケーションでシミュレートするイベント (.NET の場合は .NET イベントを起動する) を使用するか、デバイス アクションをシミュレートするオプションがあります。QTP がクリック ステップにどのオプションを使用しているかを知る方法は、ステップが実行されたときにマウス カーソルがボタンに移動したかどうかを確認することです。

QTP がイベント実行を使用している場合、アプリケーションが期待する正確なイベントを実行しなかったため、手動テスト時とは異なる結果が得られた可能性があります。この場合、DeviceReplayオブジェクトの使用を試すことができます (ここで説明されているように)。

于 2012-07-01T09:01:42.240 に答える